判断闰年仍是挺有用的。mysql
select DAY(LAST_DAY(DATE_ADD(CURRENT_DATE,INTERVAL -DAYOFYEAR(CURRENT_DATE)+1+31 DAY))) as dy FROM T1
这个看起来有一点点复杂,其实拆开了仍是很简单的。
CURRENT_DATE 获取当前日期。sql
DATE_ADD(CURRENT_DATE,INTERVAL -DAYOFYEAR(CURRENT_DATE)+1+31 DAY)
当前的日期,减去了从1月1号经历的天数而后加1,这个得到的就是1月1号。由于1月有31天,因此加上31,那么就是今年的2月1号。code
LAST_DAY 是获取该月的最后一天。因此就可以得出2月最后一天的日期了。server
with x(dy,mth) as ( select dy,MONTH(dy) from( select dateadd(MM,1,(getdate()-datepart(dy,getdate()))+1) dy from T1) tmp1 union all select dateadd(dd,1,dy),mth from x where MONTH(dateadd(dd,1,dy))=mth ) select MAX(DAY(dy)) from x
这么一看有点复杂,原理是同样的。blog
select dateadd(MM,1,(getdate()-datepart(dy,getdate()))+1) dy from T1
获取2月第一天,第一步和mysql是一致的。递归
而后就是递归2月的每一天,得出最后一天是28仍是29。get