>如何在字符类中指定]符号(MS SQL SERVER PATINDEX 函数(?
'%["[]%' - for starting bracket - it works
'%["]]%' - for ending - it does not
看起来没有办法正确转义 PATINDEX 中的右括号 (](。 ]可以逐字书写,但不能包含在字符集中。
但是,根据这个 DBA.SE 问题,有一些解决方法(有关完整示例,请参阅链接的文章(:
- 指定包含 ] 的字符范围。(请注意,这将匹配不需要的字符(
PATINDEX('%[[-^{}:,]%' COLLATE Latin1_General_BIN2, MyJSONString)
- 在匹配前应用替换。
PATINDEX('%[[' + CHAR(174) + '@]%', REPLACE(@test,']',CHAR(174)))
- 使用 PATINDEX 两次:一次用于 ],另一次用于其余字符。
(NULLIF(PATINDEX('%[[{}:,]%', d.ResponseJSON), 0), NULLIF(PATINDEX('%]%', d.ResponseJSON), 0)))
在测试了不同的选项后,这似乎按预期工作。试一试。
PATINDEX('%[^]]%', 'test[test]') +1
添加"+1"是因为在我执行的每个测试中,它总是在结束括号"]"之前停止一个字符,这样可以确保捕获打开和关闭位置。
试一试,让我知道你的想法。