如何使LIKE匹配T-SQL中方括号内的数字或空字符串?

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

LIKE子句是否可以包含一个字符数或空字符串?
我有一个字段,我将在其中写入LIKE子句(作为字符串)。稍后我将在WHERE子句中使用一个表达式:... LIKE tableX.FormatField ...。它必须包含一个数字(单个字符或空字符串)。
类似于[0-9 ]。方括号内的空格键表示空字符串。
我有一个表,其中有一个参数配置-TblParam和字段DataFormat。我必须验证另一个表TblValue中的值和字段mn8o1p的值。通过查询进行验证。验证部分如下所示:
... WHERE TblValue.ValueToCheck LIKE TblParam.DataFormat ...
对于配置值,我需要一个数字字符或空字符串的表达式。类似于[0-9'']。由于检查的自动性质,我需要一个适合查询的表达式(不带ANDOR运算符)(见上面的示例)。同样的检查适用于其他类型的检查,所以我必须安装检查引擎。
我几乎可以肯定我不能使用[0-9''],但有其他合适的解决方案吗?
实际上,我很难验证版本字符串:1.0.1.21.0.2。它可以包含2-3个点(.)和数字。

bvjxkvbb

bvjxkvbb1#

我很确定这是不可能的,因为“”甚至不是一个字符。

  • 选择ascii('');返回null*。

'' = ' '; 是真的
“”为空;为假
如果你只想要0-9英寸(而不是“”),那么你可以这样做(以比like更有效的方式):

where col in ('1','2','3','4','5','6','7','9','0') or (col = '' and DATALENGTH(col) = 0)
6yt4nkrj

6yt4nkrj2#

这是一个棘手的问题……据我所知,只有一个*like子句是不可能做到的。你需要做like '[0-9]' OR like ''
您可以通过在TableX中添加第二列来实现这一点。这表示第二种模式,或者是否包含空格。

pprl5pva

pprl5pva3#

如果我正确理解你的问题,你需要一个能捕捉空字符串的东西。尝试使用nullf()函数:

create table t1 (a nvarchar(1))
insert t1(a) values('')
insert t1(a) values('1')
insert t1(a) values('2')
insert t1(a) values('a')
-- must select first three 
select a from t1 where a like '[0-9]' or nullif(a,'') is null

它只返回三条记录:“”、“1”和“2”。
只有一个range子句的更方便的方法是:

select a from t1 where isnull(nullif(a,''),0) like '[0-9]'

相关问题