sql-server – 如何在T-SQL中组合LIKE以显示除“:”,“ – ”,“〜”之外的所有行?

我有一个SQL Server引擎,我在其中提交了filter子句.我需要将该子句组合以显示除包含:, – ,〜之外的所有行.

我的查询是:

SELECT 1 
WHERE '' LIKE '%[^:-~]%'

它不起作用 – 它显示零行.我也尝试这个:

SELECT 1 
WHERE 'aa:a' LIKE '%[^:-~]%'

并且它显示为结果1,这不是期望的结果.

有办法管理这个吗?

备注:like之后的表达式必须是将保存在表字段中的字符串(例如:’%[^: – 〜]%’将用作LIKE x.fldFilter)

编辑:我需要在SQL Server内部的引擎内进行验证.我有一个参数表.在里面我有列格式.对于特定参数,我需要检查提供的值是否适合Format列.

例如:

DECLARE @value AS VARCHAR(1000) = 'aaa:aa';

SELECT 1 FROM dbo.ParameterDefinitions X WHERE @value LIKE X.[Format];

其中X. [Format]列包含’%[^: – 〜]%’.

当我测试一个值时,如果它符合条件则必须返回1,如果不适合,则必须返回任何值.

因此,如果我测试值’aaa:aa’或甚至”它的工作原理.但是当我有空字符串(”)时,条件不起作用.

不幸的是,我不能改变我的发动机,不能用空间替换”.我只是想知道为什么”不符合条件?

最佳答案 这是由于SQL Server没有可靠的正则表达式实现.

而不是用^来否定你的搜索

用Not否定它

SELECT 1    
WHERE '' NOT LIKE '%[:-~]%'

返回1行

SELECT 1 
WHERE 'aa:a' NOT LIKE '%[:-~]%'

返回0行

编辑:
打破你的搜索案例

'' LIKE '%[^:-~]%'

[^: – 〜]需要单个字符,因此空字符串必须失败

'aa:a' LIKE '%[^:-~]%'

%是一个0或更多的通配符,当%收集你的禁用字符时,[^: – 〜]选择’a’.

使用完整的正则表达式引擎,我们可以使用以下[^: – 〜] *重复您的否定范围,但SQL Server不支持. Docs

留给我们的唯一选择是搜索禁止字符’%[: – 〜]%’并否定之类的.

点赞