1

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

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

2 回答 2

0

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

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

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

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

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

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

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

于 2020-07-31T20:15:42.600 回答