替换 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
我做了很多研究,似乎找不到任何答案。我需要做的是:
将 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