统计某个字符出现的次数,本示例是统计逗号出现的次数:
由于照片字段是支持上传多张照片的,上传多张后会自动用逗号隔开,所以思路是数逗号出现的次数达到计数的目的。
select
id, length(ca.photo) – length(translate(ca.photo,’,’,”))+1 as 照片数量
from call as ca
其中translate函数的解释如下:
select translate(‘她真是好看’, ‘好看’,’哈哈哈’)
结果是:她真是哈哈哈
参考此思路,把出现的逗号全部替换为空,然后长度之差即为出现的次数。
源表:
id | photo |
1111 | [“2019-08-06qFu8”, “2019-08-06aHu0”] |
2222 | [“2019-08-06g6ZB”] |
3333 |
运行结果:
id | 照片数量 |
1111 | 2 |
2222 | 1 |
3333 |
另一种写法是,参考自(https://blog.csdn.net/doupeihua/article/details/37566157):
select
id, LENGTH(TRANSLATE(ca.ext->>’photo_for_business_review’,’,’::text||(ca.ext->>’photo_for_business_review’::text),’,’)) + 1,
from call ca
注意一定要转化为text之后再操作。
一、语法:
TRANSLATE(string,from_str,to_str)
二、目的
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。