问题描述:

oracle中varchar2类型或者是clob类型中包含中文及英文字符,现在要统计中文字符(按2个字节计算),英文字符(按一个字符计算)。


问题解决方案:

oracle目前我了解的好像没有直接的函数可以使用(不才^_^),但提供两个可以统计字符的函数,length()和lengthb()。


下面的例子可以说明两个函数的区别:

select length('中华12') from dual --返回4,也就是占用4个字符

select lengthb('中华12') from dual --返回8,也就是占用8个字节,其中中华儿子各占3个字节,而12两个字符各占一个字节

可以看出lengthb()确实是计算中英文字符总的占用的字节,但是中文字符按3个字节计算,而我要得到的是2个字节。


于是混合使用这两个函数就可以计算出我要的字节数:

length(t_conutclob)+(lengthb(t_conutclob)-length(t_conutclob))/2