分析小数部分位数时遇到的小坑

发布时间 2023-06-16 18:30:08作者: soccerchen

本篇随笔讲一下split()和split_part()

1、split函数

split(<str>, <pat>, [<trimTailEmpty>])
参数1是一个string
参数2要注意是一个正则表达式,不是string(这也是本次遇到小坑的地方)
参数3不常用,true是默认值,如果解析"a,b,c,,",true时得到['a','b','c'],它会把末尾的空值剔掉,如果是false得到的是['a','b','c','','']
一般来说参数3写false的场景,大概只有在检查数据质量时用到,比如给空数据和不给结果是一样的,但如果是上游新增数据时就可以提现出来差异
坑点:
楼主在解析小数时,正是因为不清楚参数2是正则表达式,而'.'正是一个特殊字符
解决这个问题的方法是split('123,45','[.]'),用中括号括起来就可以解决这个问题

2、split_part函数

string split_part(string <str>, string <separator>, bigint <start>[, bigint <end>]
刚好解决问题的时候病急乱投医看到的,就分享一下不常用的函数
参数1是string,会隐式转换
参数2也是string,这个就和split不一样
参数3理解为解析后数组起始编号,从1开始
参数4同参数3,不是步长而是终止编号,必须大于等于参数3
返回值是一个字符串,这个怎么理解呢?
比如select split_part('a,b,c,d', ',', 1, 2)得到的是'a,b',也就是相当于从split解析后的数组里再拼接好这部分字符串
一些特殊案例的返回值就不列举,大家可以自己试一下