2016-02-10 36 views
1

我有一个查询,它使用需要知道自当年1月1日以来经过了多少天。如何获得自今年开始以来的多少天?

这意味着如果该查询例如在运行:

2017年1月2日比它应该返回2(如2日以来,1月1日2017年 传递)。

2016年2月10日比它应该返回41(自第1天 2016年1月以来经过41天)。

基本上它需要采取从Curent DateCurrent Year和计数以后的日子里1/1/(Year).

我有当年有:SELECT EXTRACT(year FROM CURRENT_DATE);

我创造了一月的第一个具有:

select (SELECT EXTRACT(year FROM CURRENT_DATE)::text || '-01-01')::date 

我该如何得到这个日期到Current_Date的区别?

基本上这个问题可以是给定两个日期,他们之间有多少天

类似age(timestamp '2016-01-01', timestamp '2016-06-15')不好因为我只需要几天的结果。而年龄则以年,月和日为单位。

回答

4

一种更简单的方法可以将其解压到一年的领域之日起的日子(“DOY”):

db=> SELECT EXTRACT(DOY FROM CURRENT_DATE); 
date_part 
----------- 
     41 

如果你需要它作为一个数字,你可以只投它:

db=> SELECT EXTRACT(DOY FROM CURRENT_DATE)::int; 
date_part 
----------- 
     41 

注意:结果41是在今天2月9日运行查询生成的。

+0

什么是DOY?我在Postgresql手册中看不到它 – java

+1

@java:它在这里http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT –

1

给定两个日期,他们之间有多少天

只是subtract one from the other


在你的情况,你可能只是一轮CURRENT_DATE到一年的开始和减去从当前日期:

select current_date - date_trunc('year', current_date)::date 

::date转换是必要得到的结果为整数,否则结果将是一个间隔。

1

另一种解决方案是使用DATEDIFF

SELECT DATE_PART('day', now()::timestamp - '2016-01-01 00:00:00'::timestamp); 
相关问题