2017-08-09 21 views
0

から最初のN個の配列要素を取得し、私は、配列をネスト解除する前に、アレイ「成分」の最初の5つの要素にアクセスしたい:UNNEST + string_to_array機能

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] 

答えて

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]を配列にではなく、既にネストされていない結果セットに適用しようとしています。

関連する問題