mssql patindex for] символ - PullRequest
       23

mssql patindex for] символ

0 голосов
/ 04 сентября 2018

Как указать] символ внутри класса символов (функция MS SQL SERVER PATINDEX)?

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

1 Ответ

0 голосов
/ 05 сентября 2018

Похоже, что в 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)))
...