postgresql根据字符分割数据为多列

在实际的项目中我们经常会需要将数据库中的数据根据特定的字符比如: ‘,’ ‘-’ ‘+’ '*'等符号分割成多列。虽然分割数据工作可以在后端进行处理,但这样不能处理数据库中分成多列,供以后使用。

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函数
这个函数有个缺点就是一次分割你只能选择一块输出,不能像前面一样把分割后的数据存到数组里。
在这里插入图片描述
虽然一次只能取一个数据,但是吧如果想多取点,那就多查询就好了
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Postgresql中可以使用split_part函数对字符串进行分割,具体用法如下: ``` split_part(string, delimiter, field) ``` 其中,string为待分割字符串,delimiter为分隔符,field为需要获取的分割后的子串的位置(从1开始计数)。 例如,想要获取字符串"hello,world"中的第二个子串,可以使用如下语句: ``` SELECT split_part('hello,world', ',', 2); ``` 执行结果为"world"。 另外,如果你想要截取字符串的一部分,可以使用substring函数,具体用法如下: ``` substring(string from start for length) ``` 其中,string为待截取的字符串,start为截取的起始位置,length为截取的长度。 例如,想要截取字符串"hello,world"中的第一个子串,可以使用如下语句: ``` SELECT substring('hello,world' from 1 for 5); ``` 执行结果为"hello"。 ### 回答2: 在PostgreSQL中,可以使用split_part函数来分割字符串。 split_part函数需要三个参数:字符串、分隔符、分割的位置。 例如,我们有以下字符串:'Hello,World,This,is,PostgreSQL',我们想要按照逗号分隔字符串,我们可以使用如下的SQL语句进行分割: SELECT split_part('Hello,World,This,is,PostgreSQL', ',', 1) AS part1, split_part('Hello,World,This,is,PostgreSQL', ',', 2) AS part2, split_part('Hello,World,This,is,PostgreSQL', ',', 3) AS part3 执行上述SQL语句后,我们会得到以下结果: part1: 'Hello' part2: 'World' part3: 'This' 这样,我们就成功地将字符串按照逗号进行了分割。 需要注意的是,如果分割的位置超过了字符串的实际分割数量,则会返回空字符串。 除了split_part函数外,PostgreSQL还提供了其他函数,如substring、strpos等,用于字符串的截取和查找。根据实际需求,可以选择合适的函数来处理字符串。 ### 回答3: PostgreSQL提供了多种方法来进行字符分割和截取。 1. 使用split_part函数:split_part函数可以将一个字符串根据指定的分隔符进行分割,并返回指定位置的子字符串。其语法如下: split_part(string, delimiter, position) 例如,要截取字符串"Hello,World"中的"World",可以使用以下语句: SELECT split_part('Hello,World', ',', 2); 结果为"World"。 2. 使用substring函数:substring函数可以从一个字符串中截取指定位置和长度的子字符串。其语法如下: substring(string from start_position [for length]) 例如,要截取字符串"Hello,World"中的"World",可以使用以下语句: SELECT substring('Hello,World' from 7); 结果为"World"。 3. 使用regexp_split_to_table函数:regexp_split_to_table函数可以根据正则表达式将一个字符分割成多个行,并以表格的形式返回。其语法如下: regexp_split_to_table(string, pattern) 例如,要将字符串"Hello,World"按逗号分隔并以表格形式返回,可以使用以下语句: SELECT regexp_split_to_table('Hello,World', ','); 结果为两行:"Hello"和"World"。 这些方法可以根据实际需求选择适合的方式进行字符分割和截取。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值