如何在一个LIKE模式中描述以一个或两个数字结尾的字符串?

时间:2011-12-12 18:07:29

标签: sql sql-server sql-server-2008

当我搜索以一个或两个数字结尾的字符串时,我使用以下模式:

WHERE MyString LIKE 'ABC[0-9]'
OR MyString LIKE 'ABC[0-9][0-9]'

有没有办法用一个单一的等效模式表达我的意图?

4 个答案:

答案 0 :(得分:2)

如果LIKE支持正则表达式量词语法,那么执行:

LIKE 'ABC[0-9]{1,2}'

然而,根据the spec,它没有。

如果你不想使用正则表达式函数,那么你就会陷入困境。

答案 1 :(得分:1)

您可以使用regular expressions with SQLServer

然后你的表达式会变成:

where dbo.RegexMatch( MyString, N'^ABC[0-9]{1,2}$' )

答案 2 :(得分:1)

一种方法,虽然2 ORs没有太大问题(删除'??' +以跳过 1或2位数的值)

;with T(f) as (
    select 'xxxxxxxxx' union
    select 'xxxxxxxx6' union
    select 'xxxxxxx66' union
    select 'xxxxxx666' union
    select 'xxxxx6666' union 
    select 'xxxxx666x' union
    select '66' union
    select '6' union
    select ''
)
select 
    *
from 
    T
where 
    patindex('%[^0-9]%', reverse(right('??' + f, 3))) > 1

>>

f
6
66
xxxxxxx66
xxxxxxxx6

答案 3 :(得分:1)

这样的事情怎么样?

WHERE SUBSTRING(MyString, 4, 2) NOT LIKE '%[^0-9]%'