次の方法で共有


_ (ワイルドカード - 1 文字に一致) (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft 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_ownerdb_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
...