我有一個SQL查詢如下。SQL'LIKE'查詢使用'%',其中搜索條件包含'%'
Select * from table
where name like '%' + search_criteria + '%'
如果搜尋準則= 'ABC',它將返回含有xxxabcxxxx
其是精細的數據。
但是,如果我的search_criteria ='abc%',它仍然會返回包含xxxabcxxx
的數據,但不應該如此。
我該如何處理這種情況?
我有一個SQL查詢如下。SQL'LIKE'查詢使用'%',其中搜索條件包含'%'
Select * from table
where name like '%' + search_criteria + '%'
如果搜尋準則= 'ABC',它將返回含有xxxabcxxxx
其是精細的數據。
但是,如果我的search_criteria ='abc%',它仍然會返回包含xxxabcxxx
的數據,但不應該如此。
我該如何處理這種情況?
Select * from table where name like search_criteria
,如果你期待用戶添加自己的通配符...
轉義百分號\%
,讓它成爲比較值的一部分。
這隻適用於使用'LIKE'運算符的'ESCAPE'選項。沒有默認的轉義字符(無論如何,在SQL Server中)。 –
使用免責條款:
select *
from (select '123abc456' AS result from dual
union all
select '123abc%456' AS result from dual
)
WHERE result LIKE '%abc\%%' escape '\'
結果
123abc%456
您可以設置任何你想要你的轉義字符。在這種情況下,默認的'\'。轉義'\%'成爲文字,第二個'%'不會被轉義,所以再次通配符。
最簡單的辦法是免除 「像」 乾脆:
Select *
from table
where charindex(search_criteria, name) > 0
我喜歡CHARINDEX對像。從歷史上看,它有更好的表現,但我不確定它現在是否有很大的不同。
我真的很喜歡這個答案,因爲它避免了字符串連接,因爲它顯然不容易受到SQL注入的攻擊。 – StuartQ
查看[sql-server-performance](http://www.sql-server-performance.com/forum/threads/charindex-vs-like.16120/)進行v簡短比較。請注意,使用'like'findme%''仍然可以使用索引(如果存在)。 –
可能是這樣一個幫助:)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria
逃避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
那麼爲什麼添加自己的%? – Randy
你使用什麼編程語言? – Jeshurun
編程語言= C# – pratik