求助:SQL时间函数:怎样查询上一年度每个月的最后一天!

临窗飞飞 2013-01-15 02:37:00
如题
怎样查询上一年度每个月的最后一天!
比如现在是2013年可以查2012年每个月的最后一天!
每个月都是单独一个语句
如果到2014年了,也可以查2013年的

还请大侠赐教!
...全文
894 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
美到心痛 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 sz_haitao 的回复:
多取一个月,它的1日的前一天
实现楼上所说的,呵

declare @year int
set @year=2013

select dateadd(d,-1,dateadd(m,-number,cast(@year as char(4))+'-02-01')) 
from master..spt_values WHERE type ='P'and number between 1 and 12 order by number desc
/*
2012-01-31 00:00:00.000
2012-02-29 00:00:00.000
2012-03-31 00:00:00.000
2012-04-30 00:00:00.000
2012-05-31 00:00:00.000
2012-06-30 00:00:00.000
2012-07-31 00:00:00.000
2012-08-31 00:00:00.000
2012-09-30 00:00:00.000
2012-10-31 00:00:00.000
2012-11-30 00:00:00.000
2012-12-31 00:00:00.000

*/
haitao 2013-01-15
  • 打赏
  • 举报
回复
多取一个月,它的1日的前一天
Mr_Nice 2013-01-15
  • 打赏
  • 举报
回复

DECLARE @i INT
SET @i = 2013

;WITH TT
AS(
SELECT DATEADD(dd,number,CONVERT(VARCHAR,@i-1)+'-01-01') AS dd
FROM master..spt_values
WHERE type ='P'
AND number BETWEEN 0 AND 366)

SELECT MAX(DAY(dd))
FROM TT
GROUP BY MONTH(dd)
ORDER BY MONTH(dd)


/*
31
29
31
30
31
30
31
31
30
31
30
31*/
發糞塗牆 2013-01-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/dba_huangzj/article/details/7657979
01.--定义给定的一天   
02.DECLARE @Date DATETIME = GETDATE();  
03.   
04.SELECT @Date AS '目前时间'  
05.,DATEADD(DD,-1,@Date) AS '前一天'  
06.,DATEADD(DD,1,@Date) AS '后一天'  
07./*月计算*/  
08.,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS '月初'--在SQL Server中0 代表1900-01-01,通过月运算,保证日恒久为1号   
09.,DATEADD(DD,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到天)'--找到下月初再扣减1天,建议使用DATEADD而不要直接“-1”   
10.,DATEADD(SS,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到datetime的小数位)'  
11.,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS '上月第一天'  
12.,DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) AS '上月最后一天'  
13.,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS '下月第一天'  
14.,DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)))  AS '下月最后一天'  
15./*周计算*/  
16.,DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS '本周第一天(周日)'--注意此处与@@datefirst的值有关   
17.,DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS '所在星期的星期日'--注意此处与@@datefirst的值有关   
18.,DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第二天'--注意此处与@@datefirst的值有关,其他天数类推   
19.,DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天(周日)'--注意此处与@@datefirst的值有关   
20.,DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天(星期日)'--注意此处与@@datefirst的值有关   
21.,DATENAME(WEEKDAY,@Date) AS '本日是周几'  
22.,DATEPART(WEEKDAY,@Date) AS '本日是周几'--返回值 1-星期日,2-星期一,3-星期二......7-星期六   
23./*年度计算*/  
24.,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '年初'  
25.,DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '年末'  
26.,DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '去年年初'  
27.,DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date),-1) AS '去年年末'  
28.,DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '明年年初'  
29.,DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '明年年末'  
30./*季度计算*/  
31.,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '本季季初'  
32.,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '本季季末'  
33.,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '上季季初'  
34.,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '上季季末'  
35.,DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '下季季初'  
36.,DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '下季季末'

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧