扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
oracle中varchar2类型或者是clob类型中包含中文及英文字符,现在要统计中文字符(按2个字节计算),英文字符(按一个字符计算)。
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比武江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式武江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖武江地区。费用合理售后完善,10年实体公司更值得信赖。
问题解决方案:
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
统计总数的函数:count();筛选特定字符的方法是:like。
sql:select
count(*)
from
tablename
where
name
like
'%特定字符%'。
上面语句的意思就是:筛选出表字段内容中带有“特定字符”行数的总数。
22.1 问题描述 22.2 解决方案 在oracle中一个字符特别是中文占几个字节是不同的。 比如我创立一个表create table test_ly(a varchar2(4),b nvarchar2(4)) 错!最多能插入一个汉字加一个字母(或数字)。 错!b列最多能插入4个汉字,b列的一个汉字或者其他字符(比如数字或者字母或者英文标点符号)占2个字节。 由此可见,N开头的字段类型(比如NCHAR,NVARCHAR2)中,任何一个字符(包括一个汉字)占2个字节,统一的。 不以N开头的字段类型(比如CHAR,VARCHAR2)中,unicode字符(比如汉字)占3个字节,其他字符占1个字节。 Length 函数求得是占用字符数,lengthb或者vsize函数求得是占用字节数。 你说 中华12 这个字符串占用了多少字符,字节?看sql返回值便清楚了。 select length('中华12') from dual --返回4,也就是占用4个字符 select lengthb('中华12') from dual --返回8,也就是占用8个字节,其中中华儿子各占3个字节,而12两个字符各占一个字节 select lengthb(N'中华1') from dual --返回6,这是将字符串转换成为unicode字符串后,每个字符占用2个字节,3个就是6个字节 select length(N'中华1') from dual --返回3,因为只有3个字符嘛。 字符串类型字段默认的长度是以字节为单位的,具体取决于参数nls_length_semantics 的值(使用show parameters可以看到这个参数的值),默认是BYTE,也就是以字节为单位的,如果是CHAR则是以字符为单位的。表的某列可以使用字符为单位吗?当然可以,比如这样创建即可:create table test_ly(a varchar2(4 char)) 这样a列就最多能保存4个字符,而不是4个字节了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流