1

我需要在具有“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 及以上。我也不想要数字和冒号之间的通配符。

我只希望以下格式返回带有 patindex 的 1

ns1:、ns2:、ns10:、ns11: 等。

我还需要一个非功能解决方案。出于性能原因,我想使用类似字符串的功能

谢谢

4

1 回答 1

3

您可以使用:

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
于 2018-09-14T20:50:53.170 回答