更新时间:2025-11-19 GMT+08:00
分享

分割字符串

regexp_split_to_array(string text, pattern text [, flags text ])

描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。

返回值类型:text[]

示例:

1
2
3
4
5
SELECT regexp_split_to_array('hello world', E'\\s+');
 regexp_split_to_array
-----------------------
 {hello,world}
(1 row)

regexp_split_to_table(string text, pattern text [, flags text])

描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。

flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。

返回值类型:setof text

示例:

1
2
3
4
5
6
SELECT regexp_split_to_table('hello world', E'\\s+');
 regexp_split_to_table
-----------------------
 hello
 world
(2 rows)

如果没有子查询,当regexp_split_to_table函数没有匹配上时,不会输出表中的数据。这通常不是所需的返回结果,应避免这种写法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
SELECT * FROM tab;
 c1  | c2  
-----+-----
 dws |
(1 row)

SELECT c1, regexp_split_to_table(c2, E'\\s+') FROM tab;
 c1 | regexp_split_to_table 
----+-----------------------
(0 rows)

SELECT c1, (select regexp_split_to_table(c2, E'\\s+')) FROM tab;
 c1  | regexp_split_to_table 
-----+-----------------------
 dws | 
(1 row)

split_part(string text, delimiter text, field int)

描述:将原字符串根据指定的分隔符(delimiter参数)分割成若干个部分,然后提取指定位置(field参数)的部分。该函数适用于从复合字符串中提取特定字段。

参数说明:

  • string,要分割的原字符串。
  • delimiter,用于分割字符串的分隔符。
  • field,分割后要获取的部分,从1开始计数。

返回值类型:text

示例:

将字符串“abc~@~def~@~ghi”按照“~@~”分隔符进行分割,得到3个部分(abc,def,ghi),提取第2部分内容,即“def”。

1
2
3
4
5
SELECT split_part('abc~@~def~@~ghi', '~@~', 2);
 split_part
------------
 def
(1 row)

相关文档