我有一个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
留给我们的唯一选择是搜索禁止字符’%[: – 〜]%’并否定之类的.