Поиск по шаблону 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