在T-SQL LIKE条件重复字符(Repeating characters in T-SQL LI

2019-09-22 02:53发布

问题:
限制的值VARCHAR变量(或列),以数字和字符ASCI,但允许可变长度。
该脚本将不会产生所需的结果:

declare @var as VARCHAR (150)
select @var = '123ABC'

if (@var LIKE '[a-zA-Z0-9]{0,150}')
    print 'OK'
else
    print 'Not OK'  

任何人都知道如何做到这一点?

Answer 1:

你可以用不克拉^做到这一点,和NOT LIKE表达式。

所以你说,哪里不喜欢不非字母数字;)这适用于标准的数字和字符:

declare @var as VARCHAR (150)
select @var = '123ABC'

if (@var NOT LIKE '%[^a-zA-Z0-9]%')
    print 'OK'
else
    print 'Not OK'

编辑:感谢马丁整理提示,如果你想作为非字母数字当作Y中的人物在COLLATE添加如下

declare @var as VARCHAR (150)
select @var = '123ABCý'

if (@var NOT LIKE '%[^a-zA-Z0-9]%' COLLATE Latin1_General_BIN ) 
    print 'OK'
else
    print 'Not OK'  


Answer 2:

这能否帮助

Declare @t table (Alphanumeric VARCHAR(100))
Insert Into @t 
Select '123ABCD' Union All Select 'ABC' Union All 
Select '123'  Union All  Select  '123ABCý' Union All
Select 'a-z123' Union All  Select 'abc123' Union All
Select 'a1b2c3d4'


SELECT Alphanumeric
FROM @t 
WHERE Alphanumeric LIKE '%[a-zA-Z0-9]%' 
AND ( Alphanumeric NOT LIKE  '%[^0-9a-zA-Z]%' COLLATE Latin1_General_BIN) 
AND LEN(Alphanumeric)> 6 -- display records having more than a length of 6

//结果

字母数字

123ABCD
a1b2c3d4

NB〜二手马丁的整理hint..Thanks



Answer 3:

T-SQL不支持正则表达式。

您可以使用SQL CLR来运行,虽然这种表达。


也可以尝试LEN功能:

if (LEN(@var) <= 150)
    print 'OK'
else
    print 'Not OK'  


Answer 4:

T-SQL不支持正则表达式,最接近你可以得到的是PATHINDEX ,你可以用它来匹配特定字符的功能,但不能指定计数。 你可以试试用结合LEN函数来检查的长度。

编辑:检查此页面的几个例子PATINDEX



文章来源: Repeating characters in T-SQL LIKE condition