mssql patindex for ] symbol



>如何在字符类中指定]符号(MS SQL SERVER PATINDEX 函数(?

'%["[]%' - for starting bracket - it works
'%["]]%' - for ending - it does not

看起来没有办法正确转义 PATINDEX 中的右括号 (](。 ]可以逐字书写,但不能包含在字符集中。

但是,根据这个 DBA.SE 问题,有一些解决方法(有关完整示例,请参阅链接的文章(:

  1. 指定包含 ] 的字符范围。(请注意,这将匹配不需要的字符(
PATINDEX('%[[-^{}:,]%' COLLATE Latin1_General_BIN2, MyJSONString)
  1. 在匹配前应用替换。
PATINDEX('%[[' + CHAR(174) + '@]%', REPLACE(@test,']',CHAR(174)))
  1. 使用 PATINDEX 两次:一次用于 ],另一次用于其余字符。
(NULLIF(PATINDEX('%[[{}:,]%', d.ResponseJSON), 0), NULLIF(PATINDEX('%]%', d.ResponseJSON), 0)))

在测试了不同的选项后,这似乎按预期工作。试一试。

PATINDEX('%[^]]%', 'test[test]') +1

添加"+1"是因为在我执行的每个测试中,它总是在结束括号"]"之前停止一个字符,这样可以确保捕获打开和关闭位置。

试一试,让我知道你的想法。

相关内容

最新更新