尝试计算字符串中的唯一字节数?
数据(例如,电话号码只有数字字节):
1234567890
1111111112
结果:
10
2
我试过下面的方法,但没有成功,因为sum()不会接受带有if的自定义项。
select phone
, sum(
cast(if(length(regexp_replace(phone,'0',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'1',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'2',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'3',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'4',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'5',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'6',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'7',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'8',''))<10,'1','0') as int) +
cast(if(length(regexp_replace(phone,'9',''))<10,'1','0') as int)
) as unique_bytes
from table;
我也不赞成用正则表达式作为解决方案。
2条答案
按热度按时间hfyxw5xn1#
使用
+
. . . 但就像这样:您的代码有几个问题:
sum()
是聚合函数,不需要。这个
if()
正在返回字符串,但您正在将值添加到一起。我不知道你为什么用
regexp_replace()
而不仅仅是replace()
.rqqzpn5f2#