2017-05-12 2 views
0

Ich habe eine Tabelle namens Aufträge, die eine jsonb Spalte Lineitem genannt hat, die ein Array von Zeilen enthält, wobei jede Zeile eine Eigenschaft closedDate genannt hat. Ich möchte die Aufträge Tabelle durchsuchen und alle Datensätze zurückgeben, die eine Zeile enthält, die in einem angegebenen Datumsbereich fällt.Postgresql 9.5 jsonb - Suche einen Datumsbereiches innerhalb eines Arrays

[ 
    {productName:"shirt", price: 2.99, closedDate:1494607506041}, 
    {productName:"pants", price: 3.99, closedDate:1494607506041} 
] 

Antwort

0

tryjsonb_array_elements - hier ist Beispiel:

t=# with b as (
    with j as (
    select 
     'data'::text some_column 
    ,'[ 
    {"productName":"shirt", "price": 2.99, "closedDate":1494607506041}, 
    {"productName":"pants", "price": 3.99, "closedDate":1494607506041} 
]'::jsonb v 
    ) 
    select (jsonb_array_elements(j.v)->>'closedDate')::bigint cmp,* 
    from j 
) 
select distinct some_column,v 
from b 
where cmp > 1494607506040 and cmp < 1494607506042; 
some_column |                  v 
-------------+---------------------------------------------------------------------------------------------------------------------------------------------- 
data  | [{"price": 2.99, "closedDate": 1494607506041, "productName": "shirt"}, {"price": 3.99, "closedDate": 1494607506041, "productName": "pants"}] 
(1 row) 

Die oben wird die Linie, wenn eine der Array erhalten closedDate in Intervall cmp > 1494607506040 and cmp < 1494607506042

zu erhalten
0
with orders (lineItens) as (values (' 
    [ 
     {"productName":"shirt", "price": 2.99, "closedDate":1494607506041}, 
     {"productName":"pants", "price": 3.99, "closedDate":1494607505041} 
    ]'::jsonb 
)) 
select lineItens 
from orders 
where exists (
    select 1 
    from jsonb_array_elements(lineItens) e(e) 
    where (e ->> 'closedDate')::bigint between 1494607506040 and 1494607506045 
) 
; 
                    lineitens                 
---------------------------------------------------------------------------------------------------------------------------------------------- 
[{"price": 2.99, "closedDate": 1494607506041, "productName": "shirt"}, {"price": 3.99, "closedDate": 1494607505041, "productName": "pants"}] 
Verwandte Themen