_ (ワイルドカード - 1 文字に一致) (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
アンダースコア _ を使用し、LIKE
や PATINDEX
などのパターン照合を含む文字列比較操作で任意の 1 文字に一致させます。
例
A: 簡単な例
次の例では、データベース名の文字 m
から始まり、3 番目の文字が d
のデータベースがすべて返されます。 アンダースコア文字は、名前の 2 番目の文字は何の文字でもよいことを指定します。 model
データベースと msdb
データベースがこの条件を満たしています。 master
データベースはこの条件を満たしません。
SELECT name FROM sys.databases
WHERE name LIKE 'm_d%';
結果セットは次のとおりです。
name
-----
model
msdb
さらに多くのデータベースがこの条件を満たすこともあるでしょう。
複数のアンダースコアを使用し、複数の文字を表すことができます。 LIKE
条件を変更し、2 つのアンダースコア 'm__%
を含めると、結果に master データベースが含まれます。
B: より複雑な例
次の例では、_ 演算子を使用して、Person
テーブル内の an
で終わる 3 文字の名前 (名) を持つすべての人物を検索します。
-- USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '_an'
ORDER BY FirstName;
C: アンダースコア文字をエスケープ処理する
次の例では、db_owner
や db_ddladmin
など、固定データベース ロールの名前を返しますが、dbo
ユーザーも返します。
SELECT name FROM sys.database_principals
WHERE name LIKE 'db_%';
3 番目の文字位置に入っているアンダースコアはワイルドカードとして扱われ、文字 db_
で始まるプリンシパルだけで絞り込んでくれません。 アンダースコアをエスケープ処理するには、かっこ [_]
で囲みます。
SELECT name FROM sys.database_principals
WHERE name LIKE 'db[_]%';
これで dbo
ユーザーが除外されます。
結果セットは次のとおりです。
name
-------------
db_owner
db_accessadmin
db_securityadmin
...
参照
LIKE (Transact-SQL)
PATINDEX (Transact-SQL)
% (ワイルドカード - 一致する文字列)
[ ] (ワイルドカード - 一致する文字列)
[^] (ワイルドカード - 一致しない文字列)