从 Postgres jsonb 数组中提取最早日期
Extract Earliest Date from Postgres jsonb array
假设我在 postgres 列中有一个 jsonb 数组,例如
[{"startDate": "2019-09-01"}, {"startDate": "2019-07-22"}, {"startDate": "2019-08-08"}]
有没有办法从jsonb数组中提取最早的startDate?我试过使用 jsonb_array_elements 但看不到如何遍历所有元素。
您可以使用标量 sub-query
select (select (e.element ->> 'startDate')::date as start_date
from jsonb_array_elements(t.the_column) as e.element
order by start_date desc
limit 1) as start_date
from the_table t
您需要将 the_table
和 the_column
替换为您正在使用的实际 table 和列名。
将派生值转换为date
后可以直接使用MIN()
聚合:
SELECT MIN((elm ->> 'startDate')::date)
FROM t
CROSS JOIN jsonb_array_elements(jsdata) AS j(elm)
假设我在 postgres 列中有一个 jsonb 数组,例如
[{"startDate": "2019-09-01"}, {"startDate": "2019-07-22"}, {"startDate": "2019-08-08"}]
有没有办法从jsonb数组中提取最早的startDate?我试过使用 jsonb_array_elements 但看不到如何遍历所有元素。
您可以使用标量 sub-query
select (select (e.element ->> 'startDate')::date as start_date
from jsonb_array_elements(t.the_column) as e.element
order by start_date desc
limit 1) as start_date
from the_table t
您需要将 the_table
和 the_column
替换为您正在使用的实际 table 和列名。
将派生值转换为date
后可以直接使用MIN()
聚合:
SELECT MIN((elm ->> 'startDate')::date)
FROM t
CROSS JOIN jsonb_array_elements(jsdata) AS j(elm)