2012-05-29 52 views
26

我有一個SQL查詢如下。SQL'LIKE'查詢使用'%',其中搜索條件包含'%'

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

如果搜尋準則= 'ABC',它將返回含有xxxabcxxxx其是精細的數據。

但是,如果我的search_criteria ='abc%',它仍然會返回包含xxxabcxxx的數據,但不應該如此。

我該如何處理這種情況?

+1

那麼爲什麼添加自己的%? – Randy

+0

你使用什麼編程語言? – Jeshurun

+0

編程語言= C# – pratik

回答

22

MS-SQL;如果要將search_criteria中的%符號視爲文字字符而不是通配符,請將其轉義爲[%];

.... where name like '%' + replace(search_criteria, '%', '[%]') + '%' 
+1

謝謝你,給列%符號'select * from tablename其中列'%[%]%'' – stom

+0

精彩答案....謝謝。 – User

2
Select * from table where name like search_criteria 

,如果你期待用戶添加自己的通配符...

0

轉義百分號\%,讓它成爲比較值的一部分。

+0

這隻適用於使用'LIKE'運算符的'ESCAPE'選項。沒有默認的轉義字符(無論如何,在SQL Server中)。 –

2

你需要避開它:在很多數據庫中,這是通過在反斜槓前面加上\%來完成的。

因此abc變成abc\%

您的編程語言將具有數據庫特定的功能來爲您執行此操作。例如,PHP對於MySQL數據庫具有mysql_escape_string()。

7

使用免責條款:

select * 
    from (select '123abc456' AS result from dual 
     union all 
     select '123abc%456' AS result from dual 
     ) 
    WHERE result LIKE '%abc\%%' escape '\' 

結果

123abc%456 

您可以設置任何你想要你的轉義字符。在這種情況下,默認的'\'。轉義'\%'成爲文字,第二個'%'不會被轉義,所以再次通配符。

List of special characters for SQL LIKE clause

10

最簡單的辦法是免除 「像」 乾脆:

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

我喜歡CHARINDEX對像。從歷史上看,它有更好的表現,但我不確定它現在是否有很大的不同。

+0

我真的很喜歡這個答案,因爲它避免了字符串連接,因爲它顯然不容易受到SQL注入的攻擊。 – StuartQ

+0

查看[sql-server-performance](http://www.sql-server-performance.com/forum/threads/charindex-vs-like.16120/)進行v簡短比較。請注意,使用'like'findme%''仍然可以使用索引(如果存在)。 –

0

可能是這樣一個幫助:)

DECLARE @SearchCriteria VARCHAR(25) 
SET @SearchCriteria = 'employee' 
IF CHARINDEX('%', @SearchCriteria) = 0 
BEGIN 
SET @SearchCriteria = '%' + @SearchCriteria + '%' 
END 
SELECT * 
FROM Employee 
WHERE Name LIKE @SearchCriteria 
4

逃避SQL你可以用!字符:


示例 - 使用轉義字符

是非常重要的瞭解如何在模式匹配時「轉義字符」。這些例子特別涉及到在Oracle中轉義角色。

假設您想在SQL LIKE條件中搜索%或_字符。你可以使用Escape字符來做到這一點。

請注意,您只能將轉義字符定義爲單個字符(長度爲1)。

例如:

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

此SQL LIKE條件例如標識!字符作爲轉義字符。該聲明將返回所有名稱爲%的供應商。

這是在SQL LIKE條件中使用轉義字符的另一個更復雜的示例。

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

此SQL LIKE條件示例返回名稱以H開頭並以%結尾的所有供應商。例如,它會返回一個值,例如'Hello%'。

您還可以在SQL LIKE條件中將轉義字符與_字符一起使用。

例如:

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

此SQL LIKE條件的例子返回名字以H開頭,結束_所有供應商。例如,它會返回一個值,比如'Hello_'。


參考:sql/like

相關問題