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

6gpjuf90  于 2022-10-22  发布在  其他
关注(0)|答案(3)|浏览(206)

我需要按顺序查找包含符号[]的序列,如SQL Server 2014中的!@#$%^&[]{}<>?/,.*(^like表达式。
如何转义括号以查找包含目标字符串的记录?
示例

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

[TARGET TABLE]有一行[TARGET COLUMN]的值为

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

但表达式的结果为空。
我知道[]是一个通配符,但我如何转义括号来查找包含它们的字符串?

xpcnnkqh

xpcnnkqh1#

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]%';

当然,这个想法可以扩展到其他字符集。

bqjvbblv

bqjvbblv2#

您可以将左括号放在类中作为[[]。当右括号未关闭类时,它将被视为文字。(我使用class这个词作为正则表达式中的术语,我认为SQLServer文档将其称为set。)

LIKE '%"!@#$^&[[]]{}<>?/,.*(^"%';
yc0p9oo0

yc0p9oo03#

我用过这个:

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

然后这个:

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

相关问题