如何在postgresql中第三次出现之前修剪记录
我需要一个查询来获取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,
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)