如何通过LIKE表达式在SQL中找到方括号?

时间:2016-08-13 10:04:51

标签: sql sql-server tsql escaping sql-like

我需要在SQL Server 2014中按顺序查找包含[]的符号!@#$%^&[]{}<>?/,.*(^like表达式。

如何通过括号来查找包含目标字符串的记录?

实施例

SELECT * 
FROM [TARGET_TABLE] 
WHERE [TARGET COLUMN] LIKE '%"!@#$^&[]{}<>?/,.*(^"%';

[TARGET TABLE]有一行[TARGET COLUMN],其值为

some text "!@#$^&[]{}<>?/,.*(^"

但表达式的结果为空。

我知道[]是通配符,但不知道如何使用转义括号查找字符串。

2 个答案:

答案 0 :(得分:2)

LIKE有一个转义字符,默认情况下为\。您可以将其设置为其他内容。所以这应该有效:

SELECT * 
FROM [TARGET_TABLE] 
WHERE [TARGET COLUMN] LIKE '%"!@#$^\[\]{}<>?/,.*(^"%';

您可以将其设置为其他角色,但很难选择给定角色的角色:

SELECT * 
FROM [TARGET_TABLE] 
WHERE [TARGET COLUMN] LIKE '%"!@#$^+[+]{}<>?/,.*(^"%' ESCAPE '+'

但是,如果你想要更一般,也许你想要^一个字符集。例如,获取包含任何非字母数字字符的列:

SELECT * 
FROM [TARGET_TABLE] 
WHERE [TARGET COLUMN] LIKE '%[^a-zA-Z0-9]%';

或者,如果您要查找包含非字母数字字符的列:

SELECT * 
FROM [TARGET_TABLE] 
WHERE [TARGET COLUMN] NOT LIKE '%[a-zA-Z0-9]%';

这个想法当然可以扩展到其他角色集。

答案 1 :(得分:0)

我用过这个

Create Table #Rohit (VarcharValues varchar(255))
Insert into #Rohit values
('"!@#$^&[]{}<>?/,.*(^"')

然后这个

SELECT * FROM [#Rohit] WHERE VarcharValues LIKE '%"!@#$^&\[]%' Escape '\'