如何在postgresql中第三次出现之前修剪记录

如何在postgresql中第三次出现之前修剪记录,sql,postgresql,Sql,Postgresql,我需要一个查询来获取postgresql中第三次出现“~”后的字符串: input: 1~2~3~4~5~6~7~8 7~8~22~99~1 Output: 4~5~6~7~8 99~1 遗憾的是,Postgres没有“查找第n个事件”功能。但考虑到字符串的格式,我认为数组可以用于: with test_data (input) as ( values ('1~2~3~4~5~6~7~8'), ('7~8~22~99~1') ) select input,

我需要一个查询来获取postgresql中第三次出现“~”后的字符串:

input:
1~2~3~4~5~6~7~8
7~8~22~99~1

Output:
4~5~6~7~8
99~1

遗憾的是,Postgres没有“查找第n个事件”功能。但考虑到字符串的格式,我认为数组可以用于:

with test_data (input) as (
  values 
     ('1~2~3~4~5~6~7~8'),
     ('7~8~22~99~1')
)     
select input, array_to_string((string_to_array(input, '~'))[4:], '~') new_value
from test_data;
返回:

输入|新的_值
----------------+----------
1~2~3~4~5~6~7~8 | 4~5~6~7~8
7~8~22~99~1     | 99~1     
我喜欢“没有名字的马”的答案。但这里有另一种使用正则表达式的方法:

select regexp_replace(str, '^([^~]*[~]){3}$', '')
from (values ('1~2~3~4~5~6~7~8'), ('7~8~22~99~1')) v(str);
regexp\u matches()


是一个dbfiddle。

上面的查询错误:42601:在“]”处或附近出现语法错误,请您帮助解决它,字符串到数组正在工作fine@pradeeppanda . . . 这里有一个db fiddle:。仍然得到相同的错误,但没有[:4]它工作正常,但返回了整个字符串。可能是我的postgresql版本比较旧。@pradeeppanda:您使用的是哪个Postgres版本<代码>选择版本()将告诉您
select str, (regexp_matches(str, '^([^~]*[~]){3}(.*)$'))[2] as retval
from (values ('1~2~3~4~5~6~7~8'), ('7~8~22~99~1'), ('1~2')) v(str)