[英]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.