Как описать строки, заканчивающиеся одним или двумя числами в одном шаблоне LIKE? - PullRequest
1 голос
/ 12 декабря 2011

Когда я ищу строку, заканчивающуюся одним или двумя числами, я использую следующий шаблон:

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

Есть ли способ выразить свое намерение в едином эквивалентном шаблоне?

Ответы [ 4 ]

2 голосов
/ 12 декабря 2011

Если LIKE поддерживает синтаксис регулярных выражений, вы сделаете do:

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

Однако, согласно спецификации это не так.

Если вы не хотите использовать функции регулярных выражений, значит, вы застряли на том, что имеете.

1 голос
/ 12 декабря 2011

Как насчет этого?

WHERE SUBSTRING(MyString, 4, 2) NOT LIKE '%[^0-9]%'
1 голос
/ 12 декабря 2011

В одну сторону, хотя с 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
1 голос
/ 12 декабря 2011

Вы можете использовать регулярные выражения с SQLServer .

Тогда ваше выражение станет примерно таким:

where dbo.RegexMatch( MyString, N'^ABC[0-9]{1,2}$' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...