Redshift 中的 split_part 以获取解析后的最后一个值

RJL*_*RJL 1 amazon-redshift

我有兴趣从 split_part 函数结果中获取最后一项。

如果 field1 有:

abc : def : ghi : jkl
abc : def : ghi : jkl : lmn
Run Code Online (Sandbox Code Playgroud)

split_part(reverse(field1), ':', 1) 不起作用,因为它返回

lkj
nml
Run Code Online (Sandbox Code Playgroud)

我希望它返回:

jkl
lmn
Run Code Online (Sandbox Code Playgroud)

Ton*_*bbs 6

我想你正在寻找这样的东西:

reverse(split_part(reverse(field1), ':', 1));
Run Code Online (Sandbox Code Playgroud)

您还可以考虑创建一个函数:

CREATE OR REPLACE FUNCTION reverse_split_part(varchar(65535), varchar(1), int)
RETURNS varchar(65535)
AS
$$
SELECT
    reverse(split_part(reverse($1), $2, $3));
$$ LANGUAGE SQL IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

admin@dev# select reverse_split_part(field1, ':', 1) from tbl;
reverse_split_part 
--------------------
  jkl
  lmn
(2 rows)
Run Code Online (Sandbox Code Playgroud)