当前位置: 代码迷 >> Sql Server >> SQL语句 怎么取得指定月份的最后一天的日期
  详细解决方案

SQL语句 怎么取得指定月份的最后一天的日期

热度:139   发布时间:2016-04-24 08:48:29.0
SQL语句 如何取得指定月份的最后一天的日期?
求教,能给出注释更好
------解决思路----------------------
DECLARE @a DATETIME
SET @a='2014-03-15'
 SELECT DATEADD(month, DATEDIFF(month, '19991231', @a), '19991231');


------解决思路----------------------

-- 建函数
create function dbo.fn_getmonthlastday
(@y int, --> 指定年份
 @m int  --> 指定月份
) returns varchar(20)
as
begin
 declare @x varchar(20)

 select @x=convert(varchar,
                   dateadd(d,-1,dateadd(m,1,rtrim(@y)+'-'+rtrim(@m)+'-01')),
                   111)

 return @x
end
 

-- 测试1
select dbo.fn_getmonthlastday(2014,3) '月份最后一天'
/*
月份最后一天
--------------------
2014/03/31

(1 row(s) affected)
*/


-- 测试2
select dbo.fn_getmonthlastday(2014,2) '月份最后一天'
/*
月份最后一天
--------------------
2014/02/28

(1 row(s) affected)
*/


-- 测试3
select dbo.fn_getmonthlastday(2013,12) '月份最后一天'
/*
月份最后一天
--------------------
2013/12/31

(1 row(s) affected)
*/

------解决思路----------------------
引用:
你就把变量改改就行了,last_day在sqlserver中没有这个函数,你这个貌似是Oracle的吧?19991231这个只是基准,可以不用,你可以自己改一下,另外你先说清楚你要在Oracle运行的还是sqlserver的,

谢谢啦,用的SQLServer2008R2

试试这个:
select dateadd(day,-1,dateadd(month,1,'2008-06'+'-01'))
/*
2008-06-30 00:00:00.000
*/

------解决思路----------------------
select DATEADD(MONTH,DATEDIFF(MONTH,'20130101',GETDATE()),'20130101')
详细解释:
select CONVERT(varchar(8),GETDATE(),120)+'01'
--2014-03-01
select CONVERT(datetime,CONVERT(varchar(8),GETDATE(),120)+'01',120)
--2014-03-01 00:00:00.000

--2. 显示本月最后一天 
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120)) 
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) 
--本月最后一天最好的sql语句--
select DATEADD(MONTH,DATEDIFF(MONTH,'19911231',GETDATE()),'19911231')

详细解释:
select DATEDIFF(MONTH,'19911231',GETDATE())
--267
select DATEADD(MONTH,DATEDIFF(MONTH,'19911231',GETDATE()),'19911231')
--2014-03-31 00:00:00.000

这个表达式是先以月为单位,以某个月的最后一天为锚点日期,(19911231),
计算它和给定日期的差值,把这个差值记为 diff ,之后再把 diff个月加到锚点日期上,就得到了给定日期所在月份的最后一天
锚点日期可以换,不过必须是某月的最后一天
  相关解决方案