declare @test varchar(50)
set @test='sad@fd'
if @test LIKE '%[a-zA-Z0-9 ./,()?''+-]%'
print 'yes'
else
print 'no'
我上面的代码给出了结果,因为它不应该给予否,因为我不允许' @'在正则表达式中。有什么不对吗?
我想在我的存储过程中处理这个问题,其中字符串是字母数字,并且允许指定特殊字符列表。我该怎么办?
答案 0 :(得分:0)
结果是“是”,因为你的字母 s 符合条件
要更清楚,请尝试运行以下代码
declare @test varchar(1000)
set @test='@@@@'
if @test LIKE '%[a-zA-Z0-9 ./,()?''+-]%'
print 'yes'
else
print 'no'
答案 1 :(得分:0)
SQL Server并不真正具有原生正则表达式 1 ,但是您尝试实现的目标仍然可以通过引入双重否定来完成LIKE
:
declare @test varchar(50)
set @test='sad@fd'
if @test NOT LIKE '%[^a-zA-Z0-9 ./,()?''+-]%'
print 'yes'
else
print 'no'
%
匹配任意数量的字符。 ^
反转字符范围。所以,现在我们要问的是 - 字符串任何字符数,然后字符不是集合a-zA-Z0-9 ./,()?''+-
,然后任意字符数? - 或者,换句话说,这个字符串是否包含给定字符集之外的任何字符?
1 您可以使用CLR集成从.NET框架访问功能齐全的正则表达式引擎。这是谈论CLR集成时给出的常用示例之一。但这里并不需要。