我在Oracle表中有一个文本字符串(“NGUYỄNNGỌCCHÀNG”)。我试图替换Unicode字符串(我的预期结果是“NGUYEN NGOC HOANG”),但它没有用。
然后我尝试将其转换为HEX,如下所示:select rawtohex(UnicodeColumn) from TestTable
;
结果如下:4E 47 55 59 C3 8A CC 83 4E 20 4E 47 4F CC A3 43 20 48 4F 41 CC 80 4E 47
遵循Unicode表格:相应的字符为:NGUYỄN NGOÌ£C HOAÌ€NG
任何人都可以帮我这个案例(Oracle脚本),我没有关于编码的经验。
更新1:
我尝试过BarbarosÖzhan的解决方案,但它无法正常工作
SQL>选项卡为(从'选择'& i_str1'str1)2选择str1, utl_raw.cast_to_varchar2((nlssort(str1,'nls_sort = binary_ai')))str2 来自选项卡SQL> /输入i_str1的值:NGUYỄNNGỌCHOÀNG
答案 0 :(得分:1)
SQL> with tab as ( select '&i_str1' str1 from dual )
2 select str1, utl_raw.cast_to_varchar2((nlssort(str1,'nls_sort=binary_ai'))) str2 from tab
SQL> /
Enter value for i_str1: NGUYỄN NGỌC HOÀNG
,你得到了理想的结果。
答案 1 :(得分:0)
如果您使用Java连接到Oracle DBMS,请尝试使用以下Java代码转换为unaccent字符,然后再更新DBMS中的行。
public static String unAccent(String s) {
String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(temp).replaceAll("").replaceAll("Đ", "D").replace("đ", "");
}
答案 2 :(得分:0)
您可以尝试使用此功能转换为非重音字符:
CREATE OR REPLACE FUNCTION FN_CONVERT_TO_VN
(
STRINPUT IN NVARCHAR2
)
RETURN NVARCHAR2
IS
STRCONVERT NVARCHAR2(32527);
BEGIN
STRCONVERT := TRANSLATE(
STRINPUT, 'áàảãạăắằẳẵặâấầẩẫậđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬĐÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴ', 'aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAADEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYY'
);
RETURN STRCONVERT;
END;