您的位置:首页 > 数据库

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

2015-12-21 12:47 393 查看
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 '''-%'''  --三个' 相当于一个’ 最好使用 "
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: