Как указать символ ] внутри класса символов (функция MS SQL SERVER PATINDEX)?
'%["[]%' - for starting bracket - it works
'%["]]%' - for ending - it does not
Как указать символ ] внутри класса символов (функция 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)))
(NULLIF(PATINDEX('%[[{}:,]%', d.ResponseJSON), 0), NULLIF(PATINDEX('%]%', d.ResponseJSON), 0)))
После тестирования различных вариантов, это, похоже, сработало, как и ожидалось. Попробуйте.
PATINDEX('%[^]]%', 'test[test]') +1
+1 добавлен, потому что в каждом тесте, который я выполнял, он всегда останавливался на один символ перед закрывающей скобкой], это гарантирует захват открытых и закрывающих позиций.
Попробуйте, дайте мне знать, что вы думаете.