有类似的问题,但我一直无法找到这个特定案例的答案。
我正在尝试对列执行替换,以便将任何类型的括号内的任何内容替换为硬编码字符串。
例如字符串 012345[678]
将更改为 012345[XXXXX]
这应该适用于任何类型的支架,所以 012345{678}
会变成012345{XXXXX}
以及。
我一直在尝试使用 PATINDEX:
SELECT CASE WHEN PATINDEX('%[([<{]%', column1) = 0
THEN column1
ELSE LEFT(column1, PATINDEX('%[([<{]%', column1))
+ 'XXXXX'
+ SUBSTRING(column1, PATINDEX('%[)>}[]]]%', column1), 1)
END
FROM mytable
正是最后的 PATINDEX 给我带来了问题,因为右方括号结束了由
[]
表示的组。句法。我试图通过将它括在嵌套括号中来逃避它,但它似乎不起作用。除了为方括号添加一个额外的大小写和使用CHARINDEX之外,我正在绘制一个空白。有什么更好的想法吗?
最佳答案
另一种解决方法是使用 isnull
的组合。和 nullif
而不是为方括号添加额外的案例。
SELECT CASE WHEN PATINDEX('%[([<{]%', column1) = 0
THEN column1
ELSE LEFT(column1, PATINDEX('%[([<{]%', column1))
+ 'XXXXX'
+ SUBSTRING(column1, ISNULL(NULLIF(PATINDEX('%[)>}]%', column1), 0), CHARINDEX(']', column1)), 1)
END
FROM myTable
关于sql - 字符范围包括 PATINDEX 中的右方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834556/