问题:将变量(或列)
的值限制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'
任何人都知道如何做到这一点?
问题:将变量(或列)
的值限制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'
任何人都知道如何做到这一点?
您可以使用 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'
这有帮助吗
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 的整理提示..谢谢