適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric プレビューの SQL データベース
_やLIKEなどのパターン マッチングを伴う文字列比較操作で、アンダースコア文字PATINDEXを使用して 1 文字を照合します。
Examples
この記事のコード サンプルでは、AdventureWorks2022 または AdventureWorksDW2022 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。
A. Basic example
次の例では、データベース名の文字 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で終わる 3 文字の名を持つ an テーブル内のすべてのユーザーを検索します。
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
...