3 回答

TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊
要在LIKE表達(dá)式中轉(zhuǎn)義特殊字符,請在其前面加上轉(zhuǎn)義字符。您可以選擇與ESCAPE關(guān)鍵字一起使用的轉(zhuǎn)義字符。(MSDN參考)
例如,使用\作為轉(zhuǎn)義字符,可以轉(zhuǎn)義%符號:
select * from table where myfield like '%15\% off%' ESCAPE '\'
如果您不知道字符串中將包含哪些字符,并且不想將其視為通配符,則可以在所有通配符前面加上轉(zhuǎn)義字符,例如:
set @myString = replace(
replace(
replace(
replace( @myString
, '\', '\\' )
, '%', '\%' )
, '_', '\_' )
, '[', '\[' )
(請注意,您也必須轉(zhuǎn)義轉(zhuǎn)義字符,并確保這是內(nèi)部字符,replace以免轉(zhuǎn)義從其他replace語句添加的轉(zhuǎn)義字符)。然后,您可以使用以下內(nèi)容:
select * from table where myfield like '%' + @myString + '%' ESCAPE '\'
還要記住為@myString變量分配更多的空間,因為隨著字符串替換它會變長。

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊
遇到類似的問題(使用NHibernate,因此ESCAPE關(guān)鍵字將非常困難),并使用方括號字符解決了該問題。所以你的樣本會變成
WHERE ... LIKE '%aa[%]bb%'
如果您需要證明:
create table test (field nvarchar(100))
go
insert test values ('abcdef%hijklm')
insert test values ('abcdefghijklm')
go
select * from test where field like 'abcdef[%]hijklm'
go

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊
假設(shè)您在模式中使用了前導(dǎo)通配符,則與其轉(zhuǎn)義在模式語法中具有特殊意義的字符串中的所有字符,不如將它更快,更容易地完成。
SELECT *
FROM YourTable
WHERE CHARINDEX(@myString , YourColumn) > 0
如果您不使用前導(dǎo)通配符,則應(yīng)避免使用上述方法,因為它不能在上使用索引YourColumn。
此外在情況下,最佳的執(zhí)行計劃將根據(jù)使用時的估計可能是更好的匹配的行的數(shù)目而變化LIKE與方形支架相比時逸出語法兩者CHARINDEX和所述ESCAPE關(guān)鍵字。
- 3 回答
- 0 關(guān)注
- 707 瀏覽
添加回答
舉報