因数据库使用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
![]()
这篇博客探讨了在PostgreSQL中如何针对中文字符进行计数的问题。由于length、regexp_matches、char_length等函数默认按字节计算,作者提出了一个创新的方法,通过正则表达式分别匹配英文数字和中文字符,然后计算它们的长度差异,从而实现中文每个计为1的目标。这种方法对于需要精确统计中文字符的应用场景非常有用。
760

被折叠的 条评论
为什么被折叠?



