PATINDEX関数とCHARINDEX関数によるアンダースコアのエスケープ
SQL Server でアンダースコアをエスケープする方法
アンダースコアをエスケープするには、以下の2つの方法があります。
角括弧を使用する
アンダースコアを角括弧 ([]
) で囲むことで、エスケープできます。例えば、db_
という名前のデータベースを検索したい場合は、次のようにクエリを書きます。
SELECT name
FROM sys.databases
WHERE name LIKE 'db[_]%';
このクエリは、db_
で始まり、その後ろに任意の文字が続くデータベースをすべて返します。
ESCAPE 句を使用することで、エスケープ文字を指定できます。例えば、アンダースコアをエスケープ文字として指定したい場合は、次のようにクエリを書きます。
SELECT name
FROM sys.databases
WHERE name LIKE 'db\_%' ESCAPE '\';
このクエリは、db_
で始まり、その後ろに任意の文字が続くデータベースをすべて返します。アンダースコアはエスケープ文字として解釈されるため、ワイルドカードとして使用されません。
- 角括弧 (
[]
) を使用する - ESCAPE 句を使用する
どちらの方法を使用しても、アンダースコアを文字通りに検索することができます。
角括弧を使用する
-- データベース名にアンダースコアを含むデータベースをすべて検索する
SELECT name
FROM sys.databases
WHERE name LIKE '[db_]%';
-- テーブル名にアンダースコアを含むテーブルをすべて検索する
SELECT name
FROM sys.tables
WHERE name LIKE '[tbl_test]%';
-- 列名にアンダースコアを含む列をすべて検索する
SELECT name
FROM sys.columns
WHERE name LIKE '[col_test]%';
ESCAPE 句を使用する
-- データベース名にアンダースコアを含むデータベースをすべて検索する
SELECT name
FROM sys.databases
WHERE name LIKE 'db\_%' ESCAPE '\';
-- テーブル名にアンダースコアを含むテーブルをすべて検索する
SELECT name
FROM sys.tables
WHERE name LIKE 'tbl\_test%' ESCAPE '\';
-- 列名にアンダースコアを含む列をすべて検索する
SELECT name
FROM sys.columns
WHERE name LIKE 'col\_test%' ESCAPE '\';
他の方法
LIKE 演算子の代わりに T-SQL の PATINDEX 関数を使用する
PATINDEX 関数は、文字列内のパターンを検索するために使用できます。アンダースコアをエスケープするには、%
を %%
に置き換えます。例えば、db_
という名前のデータベースを検索したい場合は、次のようにクエリを書きます。
SELECT name
FROM sys.databases
WHERE PATINDEX('%db%%', name) > 0;
LIKE 演算子の代わりに T-SQL の CHARINDEX 関数を使用する
SELECT name
FROM sys.databases
WHERE CHARINDEX(CHAR(37), name) > 0;
SQL Server でアンダースコアをエスケープするには、いくつかの方法があります。どの方法を使用するかは、状況によって異なります。
X 0
sql-server