sql:用分隔符分割字段,并转为多行

select * from ttt;
+--------------+
| str          |
+--------------+
| 22,333,aaa   |
| 22,ddd,aaadd |
+--------------+
2 rows in set


目标:

+-----------------------+
| 22                    |
| 333                   |
| aaa                   |
| 22                    |
| ddd                   |
| aaadd                 |
+-----------------------+

方法1 :

postgres有这个函数regexp_split_to_table

select regexp_split_to_table(str, E',') from ttt;
+-----------------------+
| regexp_split_to_table |
+-----------------------+
| 22                    |
| 333                   |
| aaa                   |
| 22                    |
| ddd                   |
| aaadd                 |
+-----------------------+
6 rows in set

方法2:

select arr[n] from 
(
    select regexp_split_to_array(str, E',') as arr,
       n as n
    from 
       ttt, 
      (SELECT generate_series(1, 100) AS n FROM dual) n 
    WHERE (n.n <= array_upper(regexp_split_to_array(str, E','),1))
) as ta;


+-------+
| arr   |
+-------+
| 22    |
| 22    |
| 333   |
| ddd   |
| aaa   |
| aaadd |
+-------+
6 rows in set

regexp_split_to_array  将字符串以某个分隔符 拆分成array
array_upper array长度
generate_series 产生一个1..100的整数的表格,如果不支持此函数,可以用包含一个1..100个整数的表格


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值