如何通过LIKE表达式在SQL中查找方括号?
问题描述:
我需要包含符号[]
像[email protected]#$%^&[]{}<>?/,.*(^
在SQL服务器2014年如何通过LIKE表达式在SQL中查找方括号?
我怎样才能逃避括号发现其中包含目标字符串记录like
表达序列找?
例
SELECT *
FROM [TARGET_TABLE]
WHERE [TARGET COLUMN] LIKE '%"[email protected]#$^&[]{}<>?/,.*(^"%';
[TARGET TABLE]
具有[TARGET COLUMN]
行哪个值
some text "[email protected]#$^&[]{}<>?/,.*(^"
但表达的结果为空。
我知道[]
是通配符,但不知道如何使用转义括号来查找字符串。
答
我已经使用这个
Create Table #Rohit (VarcharValues varchar(255))
Insert into #Rohit values
('"[email protected]#$^&[]{}<>?/,.*(^"')
那么这
SELECT * FROM [#Rohit] WHERE VarcharValues LIKE '%"[email protected]#$^&\[]%' Escape '\'
答
LIKE
有一个转义字符,默认情况下是\
。您可以将其设置为其他内容。所以这应该工作:
SELECT *
FROM [TARGET_TABLE]
WHERE [TARGET COLUMN] LIKE '%"[email protected]#$^\[\]{}<>?/,.*(^"%';
你可以将它设置为另一个字符,但它是很难选择一个给你的角色:
SELECT *
FROM [TARGET_TABLE]
WHERE [TARGET COLUMN] LIKE '%"[email protected]#$^+[+]{}<>?/,.*(^"%' 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]%';
这个想法可以,当然也可以扩展到其他套字。
答
您可以将左括号放在一个类中作为[[]
。当闭括号不关闭类时,它被视为文字。 (我用的是类从正则表达式,我认为SQL Server文档术语仅仅指的是这是一个设置)
LIKE '%"[email protected]#$^&[[]]{}<>?/,.*(^"%';
我不知道SQL服务器的具体细节但是'%\ [\]%''可以完成这项工作(Oracle和MySQL就是这种情况)。 – FDavidov