在实际的项目中我们经常会需要将数据库中的数据根据特定的字符比如: ‘,’ ‘-’ ‘+’ '*'等符号分割成多列。虽然分割数据工作可以在后端进行处理,但这样不能处理数据库中分成多列,供以后使用。
1.使用regexp_split_to_array 函数
这个函数顾名思义也就是根据匹配将字符串分割成数组
以下是例子,我将date数据如’2019-06-16’匹配’-'分割出2019 06 16三个char
当然这其中 to_char是将selltime列中date数据转换成char数据,之后 as dt(a) 意思是子查询查询结果别名为dt(a) 。(postgresql中子查询必须要有别名,不知道为啥,oracle中就不需要。)
其中dt(a) 应该是表示数组a,对应着前面select中的 a[1] a[2] a[3] (发现不是从0开始的)
这样就实现了分割数据为多列,可是 如何存进去呢
我想了办法就是insert into数据
可以看到结果
是插入新行里了,为此我还把bookid的非空约束给取消了。那么怎么插入以前的行里呢。
我没有查到能够用select数据update数据的方法,但是想到了存储过程中使用游标的方法。
将select的三个数据a[1],a[2],a[3]用游标循环分别存入三个变量中,然后update这个表中的三列数据,我太懒了。就不写了奥,哈哈。
2.split_part函数
这个函数有个缺点就是一次分割你只能选择一块输出,不能像前面一样把分割后的数据存到数组里。
虽然一次只能取一个数据,但是吧如果想多取点,那就多查询就好了