【问题标题】:Replacing non-ascii characters in MSSQL替换 MSSQL 中的非 ascii 字符
【发布时间】:2015-08-14 15:42:30
【问题描述】:

我做了很多研究,似乎找不到任何答案。我需要做的是:

将 MSSQL 列中的所有非 ascii 字符替换为其 ascii 等效字符。例如:

ë --> e
ï --> i
ñ --> n

我已阅读以下内容,这些内容可能看起来相似,但不是替换,而是消除/删除这些字符(这并不理想)。

How do I remove extended ASCII characters from a string in T-SQL?

Purpose of [^\x20-\x7E] in regular expressions

http://jamesveitch.com/t-sql-function-replace-non-printable-ascii-chars/

http://www.sqlservercentral.com/Forums/Topic853088-149-1.aspx

感谢下面的@Eric 和选定的答案。

(有用的参考:How to remove accents and all chars <> a..z in sql-server?

【问题讨论】:

标签: sql-server regex stored-procedures non-ascii-characters


【解决方案1】:

对于那些遇到这种情况的人,我发现下面是最简单的,在一个 inplace 语句中更新多个列甚至相当简单,请确保设置 varchar 大小以匹配您更改的列:

UPDATE myTable
SET [Column1]   = cast([Column1] as varchar(10)) collate SQL_Latin1_General_Cp1251_CS_AS,
    [Column2]   = cast([Column2] as varchar(20)) collate SQL_Latin1_General_Cp1251_CS_AS
FROM myTable

【讨论】:

    【解决方案2】:

    除了老式的“硬”方式(在任何语言中,甚至不仅是 SQL)之外,您无法以任何其他方式进行。

    由于在许多(口语/书面)语言中,重音字符与非重音字符不同,它实际上只是视觉上的相似性,因此没有真正的对应。有些字母可能看起来只是添加了一个符号,但实际上具有完全不同的“声音”和不同的规则(example)。

    只需构建一个表、数组或任何你知道、找到或能想到的对应关系。

    字符 |替换 ------------------ à |一种 è | e é | e ñ | n ç | C ß |乙 ...

    然后,循环您的数据和替换字符,以通过它们的对应关系替换所有字符。

    【讨论】:

    • 谢谢,使用这个和上面 Eric 的参考,我们正在创建一个基本函数来执行此操作。
    【解决方案3】:

    为您的起始符号或 ascii 表中的等效值设置一个值。 并开始一个循环并替换新代码中的所有值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2013-06-20
      • 1970-01-01
      • 2013-09-08
      相关资源
      最近更新 更多