簡體   English   中英

如何從Postgres中的JSON數據類型列中提取日期

[英]how to extract date from JSON data type column in Postgres

我有一個open_houses列,它是JSON數據類型,它看起來像這樣:

open_houses
[{"Date": "2017-08-13", "ToTime": "4:00PM", "FromTime": "2:00PM"}]
[{"Date": "2017-08-12", "ToTime": "3:00PM", "FromTime": "1:00PM"}]
[{"Date": "2017-08-12", "ToTime": "4:00PM", "FromTime": "2:00PM"}]
[{"Date": "2017-08-13", "ToTime": "3:00PM", "FromTime": "1:00PM"}]

當我嘗試從此列中提取“日期”時,我收到錯誤 -

SELECT ...
FROM   prod.vw_listing
WHERE  ...
       ...
       AND open_houses[1] -> 'Date'::DATE >= current_date;

錯誤:

cannot subscript type jsonb because it is not an array

使用->操作數來獲取json數組元素:

with vw_listing (open_houses) as ( values 
    ('[{"Date": "2017-08-13", "ToTime": "4:00PM", "FromTime": "2:00PM"}]'::jsonb),
    ('[{"Date": "2017-08-12", "ToTime": "3:00PM", "FromTime": "1:00PM"}]'),
    ('[{"Date": "2017-08-12", "ToTime": "4:00PM", "FromTime": "2:00PM"}]'),
    ('[{"Date": "2017-08-13", "ToTime": "3:00PM", "FromTime": "1:00PM"}]')
)
select (open_houses -> 0 ->> 'Date')::date
from vw_listing
;
    date    
------------
 2017-08-13
 2017-08-12
 2017-08-12
 2017-08-13

通過這樣做,我能夠解決這個問題:

SELECT ...

FROM   prod.vw_listing
WHERE  ...
       AND (open_houses -> 0 ->> 'Date')::date>= current_date;

你也可以使用這個選擇:

select (open_houses#>> '{0, Date}')::date

選擇像open_houses[0]['Date']這樣的元素是很有效的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM