如何在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
留给我们的唯一选择是搜索禁用字符'%[:-~]%'
并否定类似的字符。
我有一个 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
留给我们的唯一选择是搜索禁用字符'%[:-~]%'
并否定类似的字符。