Поиск по шаблону T-SQL - значения пространства имен

Мне нужно выполнить условие в строке, которая имеет "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 ответ

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

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
Другие вопросы по тегам