Поиск по шаблону T-SQL - значения пространства имен - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно выполнить условие в строке, которая имеет "ns [0-9]:", где [0-9] может быть любым числом, даже большим 10.

Пример:

DECLARE @test TABLE ( value VARCHAR(20))

INSERT INTO @test VALUES
( 'ns1:'),
( 'NOT OK'),
( 'ns7:'),
( 'ns8:'),
( 'ns9:'),
( 'ns10:'), 
( 'ns11:' )


SELECT *, PATINDEX( '%ns[0-9]:%', value ) passes
FROM @test

Это работает только с 1 по 9, а не с 10 и выше. Я могу использовать [0-9] [0-9], но тогда он работает только на 10 и выше. Я тоже не хочу подстановочный знак между числом и двоеточием.

Я только хочу, чтобы следующий формат возвращал 1 с patindex

ns1 :, ns2 :, ns10 :, ns11: и т. Д.

Мне также нужно нефункциональное решение. Из соображений производительности я хочу использовать такую ​​строку, как функциональность

Спасибо

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать:

select (case when value like 'ns[0-9]%:' and
                  value not like 'ns[0-9]%[^0-9]%:'
             then 1 else 0
        end) as passes_flag
...