我做了很多研究,似乎找不到任何答案。我需要做的是:
使用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?)
答案 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);
}