与正则表达式一样,在sql server中没有给出正确的结果

时间:2014-03-14 04:31:10

标签: sql regex sql-server-2008

declare @test varchar(50) 
    set @test='sad@fd'
    if @test LIKE '%[a-zA-Z0-9  ./,()?''+-]%'
    print 'yes'
    else
    print 'no' 

我上面的代码给出了结果,因为它不应该给予否,因为我不允许' @'在正则表达式中。有什么不对吗?

我想在我的存储过程中处理这个问题,其中字符串是字母数字,并且允许指定特殊字符列表。我该怎么办?

2 个答案:

答案 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集成时给出的常用示例之一。但这里并不需要。