3

问题:将变量(或列)
的值限制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'  

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

4

4 回答 4

4

您可以使用 not carat ^ 和 NOT LIKE 表达式来执行此操作。

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

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

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

编辑:感谢 Martin 的整理提示,如果您希望像 ý 这样的字符被视为非字母数字,请在 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'  
于 2012-09-03T10:46:04.377 回答
1

这有帮助吗

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~ 使用了 Martin 的整理提示..谢谢

于 2012-09-03T11:21:14.600 回答
0

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

不过,您可以使用SQL CLR来运行这样的表达式。


还可以尝试LEN功能:

if (LEN(@var) <= 150)
    print 'OK'
else
    print 'Not OK'  
于 2012-09-03T10:42:12.447 回答
0

T-SQL 不支持正则表达式,您可以获得的最接近的是PATINDEX可用于匹配特定字符的函数,但您无法指定计数。您可以尝试将其与LEN检查长度的功能结合使用。

有关. _ _PATINDEX

于 2012-09-03T10:45:16.797 回答