如何仅计算 postgres sql 查询中两个日期之间的天数。
how to calculate only days between two dates in postgres sql query .
假设我给了两个日期,如果相差一个月那么应该显示为30 days.Even个月也需要转换成天
我试过使用 age( date,now()::timestamp without time zone) 但它给出了月-日-年格式。例如:10 mons 24 days 13:57:40.5265.But 我需要以下方式。
例如,如果有两个月的差异,那么我需要输出 60 天。
两者都会给出那个结果。
select make_interval(days => ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer)::text;
select format('%1$s days', ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer);
不要将 age()
函数用于 date/time 算术。它只有 returns "symbolic" results(这对于人类表示来说已经足够好了,但对于 date/time 计算几乎没有意义;与标准差相比)。
标准 difference operator (-
) returns date
、timestamp
和 timestamp with time zone
的基于天的结果(前 returns天为int
,后两者return天为interval
s):
您可以使用 extract()
函数从基于天的间隔中提取天数:
select current_date - '2017-01-01',
extract(day from now()::timestamp - '2017-01-01 00:00:00'),
extract(day from now() - '2017-01-01 00:00:00Z');
假设我给了两个日期,如果相差一个月那么应该显示为30 days.Even个月也需要转换成天 我试过使用 age( date,now()::timestamp without time zone) 但它给出了月-日-年格式。例如:10 mons 24 days 13:57:40.5265.But 我需要以下方式。 例如,如果有两个月的差异,那么我需要输出 60 天。
两者都会给出那个结果。
select make_interval(days => ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer)::text;
select format('%1$s days', ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer);
不要将 age()
函数用于 date/time 算术。它只有 returns "symbolic" results(这对于人类表示来说已经足够好了,但对于 date/time 计算几乎没有意义;与标准差相比)。
标准 difference operator (-
) returns date
、timestamp
和 timestamp with time zone
的基于天的结果(前 returns天为int
,后两者return天为interval
s):
您可以使用 extract()
函数从基于天的间隔中提取天数:
select current_date - '2017-01-01',
extract(day from now()::timestamp - '2017-01-01 00:00:00'),
extract(day from now() - '2017-01-01 00:00:00Z');