2016-12-08 7 views
2

次のクエリを使用してJSONオブジェクトを格納する列から値を抽出します。Postgresqlを使用して一致する2番目の部分文字列を抽出します

問題それと、それが唯一の-$4,000.00あるSUBSTRING内部regexに一致する最初の値を引くない、他の列にも値-$1,990.00を引っ張ってSUBSTRINGに渡すパラメータがありますあります。

SELECT attribute_actions_text 
, SUBSTRING(attribute_actions_text FROM '"Member [Dd]iscount:":"(.+?)"') AS column_1 
, '' AS column_2 

FROM (
    VALUES 
    ('[{"Member Discount:":"-$4,000.00"},{"Member discount:":"-$1,990.00"}]') 
    , (NULL) 
    ) ls(attribute_actions_text) 

望ましい結果:

column_1  column_2 
-$4,000.00  -$1,990.00 

答えて

0

この

WITH data(id,attribute_actions_text) as (
    VALUES 
     (1,'[{"Member Discount:":"-$4,000.00"},{"Member Discount:":"-$1,990.00"}]') 
    , (2,'[{"Member Discount:":"-$4,200.00"},{"Member Discount:":"-$1,890.00"}]') 
    , (3,NULL) 
), match as (
    SELECT 
    id, 
    m, 
    ROW_NUMBER() 
    OVER (PARTITION BY id) AS r 
    FROM data, regexp_matches(data.attribute_actions_text, '"Member [Dd]iscount:":"(.+?)"', 'g') AS m 
) 
SELECT 
    id 
    ,(select m from match where id = d.id AND r=1) as col1 
    ,(select m from match where id = d.id AND r=2) as col2 
    FROM data d 

結果

1,"{-$4,000.00}","{-$1,990.00}" 2,"{-$4,200.00}","{-$1,890.00}" 3,NULL,NULL

をお試しください
関連する問題