替换 MSSQL 中的非 ASCII 字符

Replacing non-ascii characters in MSSQL

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

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

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

我已经通读了以下内容,它们看起来很相似,但是 eliminating/removing 这些字符(这并不理想)并没有被替换。

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?

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

除了老式的 "hard" 方式(在任何语言中,甚至不只是 SQL),你不能用任何其他方式来做到这一点。

由于在许多(spoken/written)种语言中,重音字符与非重音字符并不相同,实际上只是视觉上的相似,因此并没有真正的对应关系。有些字母可能看起来只是加了一个符号一样,但实际上有完全不同的 "sound" 和不同的规则 (example).

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

char | replacement
------------------
à    | a
è    | e
é    | e
ñ    | n
ç    | c
ß    | B
...

然后,循环处理您的数据和替换字符,以根据对应关系替换所有字符。

对于那些遇到这个问题的人,就像我一样,我发现下面是最简单的,在一个 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