hky*_*404 2 sql postgresql json
I have a column open_houses that's JSON data type and it looks like this:
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"}]
Run Code Online (Sandbox Code Playgroud)
When I try to extract 'Date' from this column I get an error -
SELECT ...
FROM prod.vw_listing
WHERE ...
...
AND open_houses[1] -> 'Date'::DATE >= current_date;
Run Code Online (Sandbox Code Playgroud)
Error:
cannot subscript type jsonb because it is not an array
Run Code Online (Sandbox Code Playgroud)
使用->操作数获取 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
Run Code Online (Sandbox Code Playgroud)
我能够通过这样做来解决这个问题:
SELECT ...
FROM prod.vw_listing
WHERE ...
AND (open_houses -> 0 ->> 'Date')::date>= current_date;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4028 次 |
| 最近记录: |