【发布时间】:2019-02-19 16:25:17
【问题描述】:
我需要在字符串中满足一个条件,其中包含“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:等
我还需要一个非功能性解决方案。出于性能原因,我想使用类似功能的字符串
谢谢
【问题讨论】:
-
:之后或ns之前是否有任何内容? -
您的查询在条件的开头有 %?这会稍微改变您查询的逻辑,并取消您希望从 LIKE 运算符中获得的任何性能优势。
-
是的,'ns1:'之前和之后都会有值
标签: sql sql-server tsql patindex