sqlserver like 后面的通配符注意事項


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 '''-%'''  --三個' 相當於一個’ 最好使用 "

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM