SQL 计算一年有多少天,计算当前年份有多少天。
SQL 计算一年有多少天 问题描述
计算当前年份有多少天。
SQL 计算一年有多少天 解决方案
计算当前年份有多少天,等同于计算下一年的第一天和当前年份的第一天之间的差值(以天为单位)。对于下面的所有解决方案,求解步骤都如下所示。
(1) 找到当前年份的第一天;
(2) 在上述结果的基础上加上 1 年(以得到下一年的第一天);
(3) 用第 2 步得到的结果减去第一步得到的结果。下面的各种解决方案的不同之处仅在于上述各步骤使用的内置函数不一样。
DB2
使用 DAYOFYEAR
函数找出当前年份的第一天,并使用 DAYS
函数得出当前年份有多少天。
1 select days((curr_year + 1 year)) - days(curr_year)
2 from (
3 select (current_date -
4 dayofyear(current_date) day +
5 1 day) curr_year
6 from t1
7 ) x
Oracle
使用 TRUNC
函数找出当前年份的第一天,并调用 ADD_MONTHS
函数得到下一年的第一天。
1 select add_months(trunc(sysdate,'y'),12) - trunc(sysdate,'y')
2 from dual
PostgreSQL
使用 DATE_TRUNC
函数找出当前年份的第一天,然后借助 INTERVAL
关键字计算出下一年的第一天。
1 select cast((curr_year + interval '1 year') as date) - curr_year
2 from (
3 select cast(date_trunc('year',current_date) as date) as curr_year
4 from t1
5 ) x
MySQL
使用 ADDDATE
函数找出当前年份的第一天。调用 DATEDIFF
函数,并借助 INTERVAL
关键字计算出当前年份有多少天。
1 select datediff((curr_year + interval 1 year),curr_year)
2 from (
3 select adddate(current_date,-dayofyear(current_date)+1) curr_year
4 from t1
5 ) x
SQL Server
使用 DATEADD
函数找出当前年份的第一天。调用 DATEDIFF
函数计算出当前年份有多少天。
1 select datediff(d,curr_year,dateadd(yy,1,curr_year))
2 from (
3 select dateadd(d,-datepart(dy,getdate())+1,getdate()) curr_year
4 from t1
5 ) x
SQL 计算一年有多少天 扩展知识
DB2
首先找出当前年份的第一天。调用 DAYOFYEAR
函数计算出当前日期是当前年份的第几天,用当前日期减去该值就能得到上一年的最后一天,然后加上 1 天。
select (current_date -
dayofyear(current_date) day +
1 day) curr_year
from t1
CURR_YEAR
-----------
01-JAN-2005
现在得到了当前年份的第一天,只要在此基础上加上 1 年,就能得到下一年的第一天。然后,用下一年的第一天减去当前年份的第一天,就能得到答案了。
Oracle
首先找出当前年份的第一天,直接调用内置函数 TRUNC
并把 Y
作为第二个参数(因而会截断当前系统日期值得到当前年份的第一天)即可。
select select trunc(sysdate,'y') curr_year
from dual
CURR_YEAR
-----------
01-JAN-2005
然后,在上述计算结果的基础上加上 1 年得到下一年的第一天。最后,两个日期相减得到当前年份有多少天。
PostgreSQL
先找到当前年份的第一天。为此,要调用 DATE_TRUNC
函数,如下所示。
select cast(date_trunc('year',current_date) as date) as curr_year
from t1
CURR_YEAR
-----------
01-JAN-2005
然后,在上述计算结果的基础上简单地加上 1 年,计算出下一年的第一天。接着,只需要把两个日期相减。要记得用靠后的日期减去较早的日期。得到的结果就是当前年份有多少天。
MySQL
第一步是找出当前年份的第一天。调用 DAYOFYEAR
函数得到当前日期是当前年份的第几天。用当前日期减去该值,然后加上 1 天。
select adddate(current_date,-dayofyear(current_date)+1) curr_year
from t1
CURR_YEAR
-----------
01-JAN-2005
现在得到了当前年份的第一天,下一步是在此基础上加上 1 年得到下一年的第一天。然后,用下一年的第一天减去当前年份的第一天。得到的结果就是当前年份有多少天。
SQL Server
第一步是找出当前年份的第一天。调用 DATEADD
和 DATEPART
函数从当前日期减去当前年份已经过去的天数,然后再加上 1 天。
select dateadd(d,-datepart(dy,getdate())+1,getdate()) curr_year
from t1
CURR_YEAR
-----------
01-JAN-2005
现在得到了当前年份的第一天,下一步是在此基础上加上 1 年得到下一年的第一天。然后,用下一年的第一天减去当前年份的第一天,得到的结果就是当前年份的有多少天。