【问题标题】:Replace Funny Character in a String in SQL Server在 SQL Server 中替换字符串中的有趣字符
【发布时间】:2018-06-26 08:10:33
【问题描述】:

我需要帮助来替换 SQL Server 列中的有趣字符,

我有这样的数据:

id        itemDesc
----------------------------------------------
1         Ball lock pins/ spring typeáááááá
2         Res 1.5k Ohm û R0805 1%

如果itemDesc 包含á,则将其替换为" ";如果包含 (û),请将其替换为 -。我使用了charindex,但根本没有改变,特别是对于许多有趣的字符,比如 id = 1,所以如果我使用 charindex,“球锁销/弹簧类型áááááá”=>“球锁销/弹簧类型 ááááá”

有什么办法吗? 感谢帮助

【问题讨论】:

  • 您需要使用replace
  • 你只关心那两个特殊字符吗?仅供参考:您可以更改排序规则以删除所有重音;例如stackoverflow.com/a/32047075/361842 - 与您在问题中指定的不同,但可能为您的潜在问题提供了替代解决方案?

标签: sql sql-server tsql


【解决方案1】:

可以使用REPLACE替换字符串上的字符:

SELECT REPLACE(REPLACE(itemDesc, 'á', ' '), 'û', '-') FROM table_name

如果你想UPDATEitemDesc 列上的值,你可以使用以下:

UPDATE table_name SET itemDesc = REPLACE(REPLACE(itemDesc, 'á', ' '), 'û', '-')

函数CHARINDEX不能用来替换字符,而是用来查找它们。所以你可以UPDATESELECT 只使用CHARINDEX 使用这些字符的行:

SELECT REPLACE(REPLACE(itemDesc, 'á', ' '), 'û', '-') 
FROM table_name
WHERE CHARINDEX('á', itemDesc) > 0 OR CHARINDEX('û', itemDesc) > 0

UPDATE table_name SET itemDesc = REPLACE(REPLACE(itemDesc, 'á', ' '), 'û', '-')
WHERE CHARINDEX('á', itemDesc) > 0 OR CHARINDEX('û', itemDesc) > 0

演示: http://www.sqlfiddle.com/#!18/6e241/1/0

【讨论】:

    【解决方案2】:

    如果您使用的是 SQL Server 2017,则可以使用TRANSLATE

    SELECT TRANSLATE(itemDesc, 'áû',' -') AS itemDescTidy
    FROM table_name;
    

    这比嵌套的REPLACE 更简洁一些(但实际上是相同的,因为它是一个“速记”函数)。

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2014-07-27
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多