替换MSSQL中的非ascii字符

时间:2015-06-01 08:43:59

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

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

使用ascii等效项替换MSSQL列中的所有字符,这些字符是非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?

3 个答案:

答案 0 :(得分:0)

为起始符号或ascii表中的等效值设置值。 然后启动循环并替换新代码中的所有值。

答案 1 :(得分:0)

除了老式的“硬”方式之外,你不能做任何其他方式(任何语言,甚至不仅仅是SQL)。

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

只需构建一个表格,数组或任何您知道或找到或可以想到的对应关系。

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

然后,循环访问您的数据和替换字符,以便根据它们的对应替换所有字符。

答案 2 :(得分:0)

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

#include <iostream>
#include <string>

static int unfreed_count = 0; 
#define DELETE(O) custom_delete(O,__PRETTY_FUNCTION__, __LINE__)

void custom_delete(void* ptr, const std::string& function_name, unsigned int line_number) {
    unfreed_count--;
    std::cout << "delete called in " + function_name + ":" << line_number << std::endl; 
    std::cout << "unfreed_count: = " << unfreed_count << std::endl << std::endl;
    free(ptr);
}