【问题标题】:Redshift - Pulling the right most value from cellRedshift - 从单元格中提取最右边的值
【发布时间】:2018-08-21 07:27:37
【问题描述】:

我有一个包含水果名称列表的列。我正在尝试从单元格中提取最正确的值。单元格可以有一个值或 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。

【问题讨论】:

    标签: sql split amazon-redshift


    【解决方案1】:

    尝试使用REGEXP_REPLACE

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

    .*| 模式在这里工作得很好,因为在名称字符串确实有多个水果的情况下,它会剥离所有内容,只留下最后一个水果。而且,在名称字符串只有一个名称的情况下,替换将只是无操作,也会留下相同的水果名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多