如何在T-SQL中写LIKE来显示除包含“:”、“-”、“~”的行以外的所有行?

How to compose LIKE in T-SQL to show all rows except those containing ":","-","~"?

我有一个 SQL 服务器引擎,其中有一个 filed with filter 子句。我需要组成该子句以显示所有行,但包含 :-~ 的行除外.

我的查询是:

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

它不工作 - 它显示零行。我也试试这个:

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

它显示为结果 1,这不是想要的结果。

有办法解决这个问题吗?

REMARK: like 之后的 表达式必须是将保存在 table 字段中的字符串(例如:'%[^:-~]%' 将是用作 LIKE x.fldFilter)

编辑: 我需要在 SQL 服务器内的引擎中进行验证。我有一个带参数的 table。在它里面我有列 Format。对于特定参数,我需要检查提供的值是否适合 Format 列。

例如:

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

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

其中 X.[Format] 列包含 '%[^:-~]%'.

当我测试一个值时,检查必须 return 1 如果它符合条件,如果不符合则什么都没有。

因此,如果我测试值 'aaa:aa' 甚至 ' ',它就会起作用。但是当我有空字符串('')时,条件不起作用。

不幸的是,我无法更改我的引擎,例如无法将 '' 替换为 space。我只是想知道为什么''不符合条件?

这是由于 SQL 服务器没有可靠的正则表达式实现。

而不是用 ^

否定您的搜索

用 Not 否定它

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

Returns 1 行

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

Returns 0 行

编辑: 分解您的搜索案例

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

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

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

% 是一个 0 或多个通配符,它​​让 [^:-~] 选择 'a'% 收集你的禁止字符。

使用完整的正则表达式引擎,我们可以使用以下 [^:-~]* 重复您的否定范围,但 SQL 服务器不支持该功能。 Docs

留给我们的唯一选择是搜索禁用字符'%[:-~]%'并否定类似的字符。