sql - 字符范围包括 PATINDEX 中的右方括号

标签 sql tsql sql-server-2008-r2

有类似的问题,但我一直无法找到这个特定案例的答案。

我正在尝试对列执行替换,以便将任何类型的括号内的任何内容替换为硬编码字符串。

例如字符串 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/

相关文章:

SQL Server 删除性能

mysql - SQL 创建查询并重定向到文件

sql - 像 where 子句 : is it always ignored 中的 '%'

mysql - 如何使用 SQL 执行可选 JOIN

sql-server - SQL 服务器登录和用户

sql - 如何在检查多列中任何值的引用时获取表及其列的名称?

sql - 使用 sql 从行中计算字符串值?

sql - 替代大型数据集上的左连接

sql - t sql匹配缩写

tsql - SQL Server 2012 : Round to NEAREST(! ) 从时间戳列开始的月份(以时间戳格式))