使用“ []”通配符将一个](右方括号)与PATINDEX匹配
我正在T-SQL †中编写自定义JSON解析器。 出于解析器的目的,我使用的PATINDEX功能是从标记列表中计算标记的位置。在我的情况下,标记都是单个字符,它们包括以下这些: {} []:, 通常,当我需要找到几个给定字符中任何一个的(第一个)位置时,我会使用如下PATINDEX函数: PATINDEX('%[abc]%', SourceString) 然后,该函数将为我提供aor b或or 的第一个位置c-两者中最先找到的那个SourceString。 现在,就我而言,问题似乎与]角色有关。一旦在字符列表中指定了它,例如: PATINDEX('%[[]{}:,]%', SourceString) 我的预期模式显然已损坏,因为该函数从未找到匹配项。看来我需要一种方法来转义第一个,]以便PATINDEX将其视为查找字符之一,而不是特殊符号。 我发现这个问题询问类似的问题: 需要LIKE运算符和方括号的帮助 但是,在那种情况下,]根本不需要在方括号中指定简单字符,因为它只是一个字符,可以在不带方括号的情况下进行指定。确实使用转义的替代解决方案仅针对LIKE而不适用PATINDEX,因为它使用了ESCAPE由前者而非后者支持的子句。 所以,我的问题是,有没有什么办法去寻找一个]与PATINDEX使用[ ]通配符?还是有一种方法可以使用其他Transact-SQL工具来模拟该功能? 附加信息 这是我需要PATINDEX与上述[…]模式一起使用的查询示例。这里的模式有效(尽管有点),因为它不包含]字符。我也需要使用它]: WITH data AS (SELECT CAST('{"f1":["v1","v2"],"f2":"v3"}' AS varchar(max)) AS ResponseJSON), parser AS ( SELECT Level = 1, OpenClose = 1, P = p.P, S = SUBSTRING(d.ResponseJSON, 1, NULLIF(p.P, 0) …