40

私は以下のようなSQLクエリを持っています。

Select * from table 
where name like '%' + search_criteria + '%' 

search_criteria ='abc'の場合、どちらが適切かを含むデータが返されますxxxabcxxxx

しかし、私のsearch_criteria ='abc%'の場合でもxxxabcxxx、を含むデータが返されますが、そうではないはずです。

この状況にどのように対処しますか?

4

8 に答える 8

35

%の記号をsearch_criteriaワイルドカードではなくリテラル文字として扱いたい場合は、次のようにエスケープします。[%]

... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
于 2012-05-29T17:07:51.460 に答える
14

エスケープ句を使用します。

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句の特殊文字のリストを参照してください。

于 2012-05-29T17:11:22.057 に答える
12

最も簡単な解決策は、「いいね」を完全に省くことです。

Select * 
from table
where charindex(search_criteria, name) > 0

私は好きよりcharindexを好みます。歴史的にはパフォーマンスが優れていましたが、今では大きな違いがあるかどうかはわかりません。

于 2012-05-29T18:09:27.180 に答える
6

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で始まり、%で終わるすべてのサプライヤーを返します。たとえば、「He​​llo%」などの値を返します。

SQLLIKE条件で_文字とともにエスケープ文字を使用することもできます。

例えば:

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';

このSQLLIKE条件の例は、名前がHで始まり、_で終わるすべてのサプライヤーを返します。たとえば、「He​​llo_」などの値を返します。


参照:sql / like

于 2014-09-19T13:08:01.273 に答える
2
Select * from table where name like search_criteria

ユーザーが独自のワイルドカードを追加することを期待している場合...

于 2012-05-29T16:59:30.140 に答える
2

あなたはそれをエスケープする必要があります:多くのデータベースでは、これはバックスラッシュ、を前に付けることによって行われます\%

だからabcになりabc\%ます。

プログラミング言語には、これを行うためのデータベース固有の関数があります。たとえば、PHPにはMySQLデータベース用のmysql_escape_string()があります。

于 2012-05-29T17:04:01.667 に答える
0

パーセント記号\%をエスケープして、比較値の一部にします。

于 2012-05-29T16:59:33.307 に答える
0

これが助けになるかもしれません:)

DECLARE @SearchCriteria VARCHAR(25)
SET  @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT * 
FROM Employee
WHERE Name LIKE @SearchCriteria
于 2013-12-02T00:39:10.577 に答える