私は以下のようなSQLクエリを持っています。
Select * from table
where name like '%' + search_criteria + '%'
search_criteria ='abc'の場合、どちらが適切かを含むデータが返されますxxxabcxxxx
。
しかし、私のsearch_criteria ='abc%'の場合でもxxxabcxxx
、を含むデータが返されますが、そうではないはずです。
この状況にどのように対処しますか?
私は以下のようなSQLクエリを持っています。
Select * from table
where name like '%' + search_criteria + '%'
search_criteria ='abc'の場合、どちらが適切かを含むデータが返されますxxxabcxxxx
。
しかし、私のsearch_criteria ='abc%'の場合でもxxxabcxxx
、を含むデータが返されますが、そうではないはずです。
この状況にどのように対処しますか?
%
の記号をsearch_criteria
ワイルドカードではなくリテラル文字として扱いたい場合は、次のようにエスケープします。[%]
... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
エスケープ句を使用します。
select *
from (select '123abc456' AS result from dual
union all
select '123abc%456' AS result from dual
)
WHERE result LIKE '%abc\%%' escape '\'
結果
123abc%456
エスケープ文字は好きなように設定できます。この場合、デフォルトの「\」。エスケープされた'\%'はリテラルになり、2番目の'%'はエスケープされないため、ワイルドカードになります。
SQLLIKE句の特殊文字のリストを参照してください。
最も簡単な解決策は、「いいね」を完全に省くことです。
Select *
from table
where charindex(search_criteria, name) > 0
私は好きよりcharindexを好みます。歴史的にはパフォーマンスが優れていましたが、今では大きな違いがあるかどうかはわかりません。
SQLで文字をエスケープするには、次を使用できます!
。
例-エスケープ文字の使用
パターンマッチングの際に「文字をエスケープする」方法を理解することが重要です。これらの例は、特にOracleでのエスケープ文字を扱います。
SQL LIKE条件で%または_文字を検索したいとします。これは、エスケープ文字を使用して行うことができます。
エスケープ文字は単一の文字(長さ1)としてのみ定義できることに注意してください。
例えば:
SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';
このSQLLIKE条件の例は、!を識別します。エスケープ文字としての文字。このステートメントは、名前が%のすべてのサプライヤーを返します。
これは、SQLLIKE条件でエスケープ文字を使用するもう1つのより複雑な例です。
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!%' escape '!';
このSQLLIKE条件の例は、名前がHで始まり、%で終わるすべてのサプライヤーを返します。たとえば、「Hello%」などの値を返します。
SQLLIKE条件で_文字とともにエスケープ文字を使用することもできます。
例えば:
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';
このSQLLIKE条件の例は、名前がHで始まり、_で終わるすべてのサプライヤーを返します。たとえば、「Hello_」などの値を返します。
参照:sql / like
Select * from table where name like search_criteria
ユーザーが独自のワイルドカードを追加することを期待している場合...
パーセント記号\%
をエスケープして、比較値の一部にします。
これが助けになるかもしれません:)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria