Redshift-从单元格中获取最正确的价值

时间:2018-08-21 07:27:38

标签: sql split amazon-redshift

我有一列列出水果名称。我正在尝试从单元中提取最正确的价值。像元可以具有一个值或n个值。在这种情况下,我希望获得最后一个值。

下面的示例给出了实际值(列名:name_of_fruits)和期望值(列名:expected_value)

name_of_fruits, expected_value
apples|oranges, oranges
apples|bananas, bananas
apples, apples
apples|mango|pears, pears

我尝试执行以下代码:

select name_of_fruits, right((name_of_fruits),position('|' in reverse(name_of_fruits))-1) as expected_value from table

我收到一条错误SQL错误无效操作:无效长度(上下文:给定负值)

任何人都可以协助提取所需的值。谢谢

我正在使用Redshift DB。

1 个答案:

答案 0 :(得分:3)

尝试使用REGEXP_REPLACE

SELECT
    name_of_fruits,
    REGEXP_REPLACE(name_of_fruits, '.*|', '') AS expected_value
FROM yourTable;

模式.*|在这里很好用,因为在名称字符串中确实有多个水果的情况下,它将剥离所有内容,仅保留最后一个水果。而且,如果名称字符串只有一个名称,则替换操作将是空操作,同时保留相同的水果名称。