簡體   English   中英

Postgres jsonb和查詢

[英]Postgres jsonb and query

我有一個postgres數據庫。 在“匹配”表中,我在“時間”列中存儲了這樣的JSONB:

{{"end": "2017-01-04T17:22:13.311693Z", "start": "2017-01-04T16:22:13.311693Z"}, {"end": "2017-01-04T17:22:13.311693Z", "start": "2017-01-04T16:22:13.311693Z"}}

它的工作方式類似於存儲開始時間和結束時間的對象列表。 現在,我想查詢所有未過去的匹配項。 我怎樣才能做到這一點? 是否可以將單個“起始”值與當前數據進行比較?

看看這個SQL Fiddle

您可以使用->>運算符查詢jsonb。 對於日期/時間,您需要轉換結果以便進行比較。 此查詢僅返回將來開始的值:

SELECT when_col->>'start' FROM match
WHERE to_date(when_col->>'start','YYYY-MM-DD"T"HH24:MI:SS') >= NOW();

請注意,您在上面提供的JSON格式錯誤。 我在小提琴中將它分成幾行:

CREATE TABLE match
(
  when_col jsonb
 );

 INSERT INTO match (when_col) VALUES ('{"end": "2017-01-04T17:22:13.311693Z", "start": "2017-01-04T16:22:13.311693Z"}');
 INSERT INTO match (when_col) VALUES ('{"end": "2017-02-04T17:22:13.311693Z", "start": "2017-02-04T16:22:13.311693Z"}');
 INSERT INTO match (when_col) VALUES ('{"end": "2019-02-04T17:22:13.311693Z", "start": "2019-02-04T16:22:13.311693Z"}');
 INSERT INTO match (when_col) VALUES ('{"end": "2029-02-04T17:22:13.311693Z", "start": "2029-02-04T16:22:13.311693Z"}');

暫無
暫無

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

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