*****Oracle中的全角与半角转换*****

说明:Oracle表中的数据的全角与半角问题,现在处理起来已经不那么麻烦了,这里主要说明一下小细节,以便日后提醒自己,处理所用到的两个函数:

to_single_byte(tablename) ---转成半角
to_multi_byte(tablename) -----转成全角

 

例如下面一张表:

create table books(
    bid varchar2(15), --ID
    bname varchar2(50) not null , --书名
    bauthor varchar2(15) not null,--作者
    bname_pym varchar2(50) , 
    bauthor_pym varchar2(15),
    bpublic varchar2(50)
) ;

  

假如里面的书名被录入了很多全角字段,需要转换成半角方便以后查询,你会考虑到

update books set bname_pym = to_single_byte(bname) ;

 

 这里暂不考虑性能问题,全表更新;但是你会发现执行完全角并没有被更新,当时第一次碰到也蛮奇怪,下面写法就没有问题

 

declare 
    name varchar2(100) ; 
begin .
.................... 
    nmae:=to_single_byte(bname) ; 
..................... 
    update books set bname_pym = nmae; 
..................... 

 

 这段代码是伪代码,但这样写就不会有问题,后来经同事提醒考虑一下,原来to_single_byte这个函数返回的并不是字符(如果用过Java,可以理解成Object),所以需要强制转换一下,如下

update books set bname_pym = to_char(to_single_byte(bname)) ; 

 

 这样写就不会有问题,并且完成了转换的功能。

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(oracle,java)