如果檢查出LIKE運營商的定義,你會看到,有其描述如下命名ESCAPE
可選參數:爲什麼LIKE運算符有ESCAPE參數?
是放在一個通配符前面 字符表明通配符應該被解釋爲常規的 字符而不是通配符。 escape_character是一個字符 表達式,它沒有默認值並且只能計算一個 字符。
所以,當你寫一個WHERE
條款類似如下,你告訴SQL Server引擎對待感嘆號作爲轉義字符(就像在C#中的'\'
字符)列出的意見,其中包括'30%」子串:
WHERE comment LIKE '%30!%%' ESCAPE '!'
現在這裏讓我感到困惑。通過將通配符放入方括號內已可以將其轉義。爲什麼要引入ESCAPE
參數?這是有原因,我猜。
編輯:我看到幾個解釋ESCAPE
如何工作的答案。我知道ESCAPE
用於轉義通配符,但我也知道可以使用方括號轉義這些通配符。我只想了解「ESCAPE方法」具有什麼,「方括號方法」沒有。
編輯2:雖然Szymon的例子是完全有效的,但我不認爲這是ESCAPE被引入的唯一原因。我當然可能是錯的,但我懷疑可能有一些基於表現的原因,我不知道。 Szymon,您可以實現如下相同:
DECLARE @TEST_STRING VARCHAR(100) = 'ddd]eee';
SELECT 'MATCHED! (Szymon)' WHERE @TEST_STRING LIKE '%[abc!]]%' ESCAPE '!';
SELECT 'MATCHED! (Altern)' WHERE @TEST_STRING LIKE '%[abc]%' OR @TEST_STRING LIKE '%]%';
作爲一個附註,您不需要轉義左方括號字符。
它應該*不*被視爲通配符的引擎? (順便說一句:這不是SQL Server特定的 - 它是由SQL標準定義的) –
@a_horse_with_no_name:'[_]'和'[%]'分別。 – Heinzi
@anario我的回答是你在找什麼? – Szymon