如何拆分字符串并选择第 n 部分

um1*_*123 4 string postgresql substring

我想使用冒号作为分隔符分割字符串并选择第二和第三部分。

桌子:

|asdsc:dcdes:dcd|
|dcfd:drfe:regf |
Run Code Online (Sandbox Code Playgroud)

预期输出:

|dcdes|
|drfe|
Run Code Online (Sandbox Code Playgroud)

还有第三列:

|dcd |
|regf|
Run Code Online (Sandbox Code Playgroud)

kli*_*lin 7

使用split_part()

with my_table(str) as (
    values 
    ('asdsc:dcdes:dcd'),
    ('dcfd:drfe:regf')
)

select 
    str, 
    split_part(str, ':', 2) as part_no_2, 
    split_part(str, ':', 3) as part_no_3
from my_table

       str       | part_no_2 | part_no_3 
-----------------+-----------+-----------
 asdsc:dcdes:dcd | dcdes     | dcd
 dcfd:drfe:regf  | drfe      | regf
(2 rows)    
Run Code Online (Sandbox Code Playgroud)


Kam*_*ski 5

您可以使用作为string_to_array分隔符将字符串转换为数组,:以获取分隔符之间的每个元素,然后指定数组的索引以检索值。这里你想省略第一个,但保留第二个和第三个。

代码:

select strarr[2], strarr[3]
from (
select string_to_array(string_col, ':') as strarr
from yourtable
  ) t
Run Code Online (Sandbox Code Playgroud)