从unfst + string_to_array函数中获取前N个数组元素

时间:2017-08-09 00:14:48

标签: arrays postgresql psql

我想访问数组的前5个元素"成分"在UNNESTing数组之前:

SELECT 
    TRIM
    (REGEXP_REPLACE
        (UNNEST
            (string_to_array(ingredients, ';'))[1:5], '\S+\%|\s+\(.*?\)','','g'))
FROM products 

"成分"数组可能包含以下值:

{'1%', 'abc(2%)', 'abcd', ... , N th element}

以下代码运行正常,但我不知道上述代码有什么问题。

SELECT (string_to_array('1,2,3,4',','))[1:3]

1 个答案:

答案 0 :(得分:0)

这有效:

select
  trim(
    regexp_replace(
      unnest(
        (string_to_array(ingredients, ';'))[1:5]
      ),
      '\S+\%|\s+\(.*?\)',
      '',
      'g'
    )
  )
from products;

您的示例显示了保持良好格式/缩进的重要性。

以下内容与您编写的内容相同,但重新格式化(左括号是函数本身旁边,右边是缩进级别,内部的任何内容都缩进更多):

SELECT 
    TRIM(
        REGEXP_REPLACE(
           UNNEST(
               string_to_array(ingredients, ';')
           )[1:5],
           '\S+\%|\s+\(.*?\)',
           '',
           'g'
        )
    )
FROM products 

- 错误显而易见,您尝试将[1:5]应用于已经无效的结果集,而不是数组。