我有一列列出水果名称。我正在尝试从单元中提取最正确的价值。像元可以具有一个值或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。
答案 0 :(得分:3)
尝试使用REGEXP_REPLACE
:
SELECT
name_of_fruits,
REGEXP_REPLACE(name_of_fruits, '.*|', '') AS expected_value
FROM yourTable;
模式.*|
在这里很好用,因为在名称字符串中确实有多个水果的情况下,它将剥离所有内容,仅保留最后一个水果。而且,如果名称字符串只有一个名称,则替换操作将是空操作,同时保留相同的水果名称。