各位,现在遇到一个问题,请大家指教,先说说我的oracle是在日文系统下的(没办法,给小日本干活),我想在存储过程中做一些字符串修改的操作,比如有一个字段长度是20个字节,1-5:名称(可能有全角)、6-8:编码(半角如:1F0),其他可以忽略,我需要把编码修改成2F1。现在遇到的问题是:如果名称(字符串的前5个字节)是三个空格+一个全角字符,我使用oracle的Substr肯定是不可以的,使用SubStrb函数也是不行的,因为日文系统下的全角字符是三个字节。所以在我先将字段中取出的字符串使用Convert函数将他转换成一下字符集:v_SeatInf := convert(r_SEEK_ROW.Seat_Inf,'JA16SJIS'); 转换之后全角就是两个字节,我再使用substrb函数来修改编码,v_SeatInf := substrb(v_SeatInf,1,(v_i * 20) + 5 ) || v_c_Pei || v_c_Func || substrb(v_SeatInf,(v_i * 20) + 5 +4);最后再把字符集转化回来:v_SeatInf := convert(v_SeatInf,'AL32UTF8','JA16SJIS'); 然后就发现全角字符变成了乱码,郁闷。大家可能看得比较晕,那就简单点:
select convert(substrb(convert(' 一1F0', 'JA16SJIS'), 1, 5) || substrb(convert(' 一1F0', 'JA16SJIS'),6),'AL32UTF8','JA16SJIS') from dual;这样的一条的执行结果是: ?1F0。 不知道为什么那个"一"(日文中的汉字一)变成了乱码,有没有知道或者遇到相同问题的好心人指点一下啊。
select convert(substrb(convert(' 一1F0', 'JA16SJIS'), 1, 5) || substrb(convert(' 一1F0', 'JA16SJIS'),6),'AL32UTF8','JA16SJIS') from dual;这样的一条的执行结果是: ?1F0。 不知道为什么那个"一"(日文中的汉字一)变成了乱码,有没有知道或者遇到相同问题的好心人指点一下啊。
_______________________________
DBA请进群QQ群:37204725
'JA16SJIS'),6),'AL32UTF8','JA16SJIS') from dual;CONVERT(S
---------
涓€1F0正常应该显示什么?
FROM DUAL--------------
涓€1F0还是没太明白什么意思,将substrb换成substr试试?