求教,能给出注释更好
------解决思路----------------------
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)
*/
------解决思路----------------------
谢谢啦,用的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个月加到锚点日期上,就得到了给定日期所在月份的最后一天
锚点日期可以换,不过必须是某月的最后一天