[postgresql]计算中文字符的个数

这篇博客探讨了在PostgreSQL中如何针对中文字符进行计数的问题。由于length、regexp_matches、char_length等函数默认按字节计算,作者提出了一个创新的方法,通过正则表达式分别匹配英文数字和中文字符,然后计算它们的长度差异,从而实现中文每个计为1的目标。这种方法对于需要精确统计中文字符的应用场景非常有用。
摘要由CSDN通过智能技术生成

因数据库使用UTF-8,保存中文使用3个字节,英文和数字使用1个字节,有一个需求需要把一个中文统计为1, postgresql的length、regexp_matches、char_length均是按字节计算长度,因此需要重新写一个计算规则。

原理:把数字英文、中文分别计算。

with t1 as (
select char_length(regexp_matches('123中123abc','[a-zA-Z0-9]+','g')::text)-2 as len
union all
select (char_length(regexp_matches('123中123abc','[^a-zA-Z0-9]+','g')::text)-2)/3 as len
)
select sum(len)::int as len from t1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值