sqlserver like 后面的通配符注意事項
1.%:匹配零個及多個任意字符;
2. _:與任意單字符匹配;
3.[]:匹配一個范圍;
4.[^]:排除一個范圍
以上4種是最基本的使用方法,但是字符串中出現的特殊字符:'%','[','[]', '_' 時,我們又該如何處理呢?
直接上代碼:
GO CREATE TABLE #TEMP( VAL NVARCHAR(100) ) GO INSERT INTO #TEMP VALUES('關於[中國]的文件') --(想要的數據) INSERT INTO #TEMP VALUES('關於[日本]的文件') INSERT INTO #TEMP VALUES('T_T的相關文件') --(想要的數據) INSERT INTO #TEMP VALUES('TMT的相關文件') INSERT INTO #TEMP VALUES('增長%50') --(想要的數據) INSERT INTO #TEMP VALUES('增長%60') --(想要的數據) INSERT INTO #TEMP VALUES('增長5倍') INSERT INTO #TEMP VALUES('增長6倍') INSERT INTO #TEMP VALUES('你好[]') --(想要的數據) INSERT INTO #TEMP VALUES('你好x') DROP TABLE #TEMP GO SELECT * FROM #TEMP WHERE VAL LIKE '關於[中國]%' SELECT * FROM #TEMP WHERE VAL LIKE '關於[[]中國]%' --這個才是我們想要的sql SELECT * FROM #TEMP WHERE VAL LIKE 'T_T%' SELECT * FROM #TEMP WHERE VAL LIKE 'T[_]T%' --這個才是我們想要的sql SELECT * FROM #TEMP WHERE VAL LIKE '增長%' SELECT * FROM #TEMP WHERE VAL LIKE '增長[%]%' --這個才是我們想要的sql,增長百分比的結果 SELECT * FROM #TEMP WHERE VAL LIKE '你好[]' SELECT * FROM #TEMP WHERE VAL LIKE '你好[[]]' --這個才是我們想要的sql
總之:
1. 用 like '[[]' 匹配特殊字符 '['
2. 用 like ']' 匹配特殊字符 ']'
3. 用 like '[[]]' 匹配特殊字符 '[]'
4. 用 like '[_]' 匹配特殊字符 '_'
5. 用 like '[%]' 匹配特殊字符 '%'
對於其他的特殊字符:'^', '-', ']' 因為它們本身在包含在 '[]' 中使用,所以需要用另外的方式來轉義,於是就引入了 like 中的escape 子句,另外值得注意的是:escape 可以轉義所有的特殊字符。
例如:
--可以讓我們的一些關鍵字 進行轉義滴呀 SELECT * FROM #TEMP WHERE VAL LIKE '你好/[/]' ESCAPE '/'
可是不要忘了還有轉義符自身,萬一用戶輸入轉義符的話,
以上的處理就會發生SQL錯誤。所以也必須對轉義符進行變換。變換方法就是將[/]轉換為[//]
還有我們的引號(')
INSERT INTO #TEMP VALUES('"你好"') INSERT INTO #TEMP VALUES('''-------''') SELECT * FROM #TEMP WHERE VAL LIKE '"你%' SELECT * FROM #TEMP WHERE VAL LIKE '''-%''' --三個' 相當於一個’ 最好使用 "
