SQL语句 如何取得指定月份的最后一天的日期? sql语句 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DECLARE @a DATETIMESET @a='2014-03-15' SELECT DATEADD(month, DATEDIFF(month, '19991231', @a), '19991231'); 不太懂啊,last_day(to_date('2014-03-15','yyyy-mm-dd'))和这个有什么不同啊还有我们一定要用19991231这天作为基准吗?这样做是不是麻烦了?多谢指教 你就把变量改改就行了,last_day在sqlserver中没有这个函数,你这个貌似是Oracle的吧?19991231这个只是基准,可以不用,你可以自己改一下,另外你先说清楚你要在Oracle运行的还是sqlserver的, -- 建函数create function dbo.fn_getmonthlastday(@y int, --> 指定年份 @m int --> 指定月份) returns varchar(20)asbegin declare @x varchar(20) select @x=convert(varchar, dateadd(d,-1,dateadd(m,1,rtrim(@y)+'-'+rtrim(@m)+'-01')), 111) return @xend -- 测试1select dbo.fn_getmonthlastday(2014,3) '月份最后一天'/*月份最后一天--------------------2014/03/31(1 row(s) affected)*/-- 测试2select dbo.fn_getmonthlastday(2014,2) '月份最后一天'/*月份最后一天--------------------2014/02/28(1 row(s) affected)*/-- 测试3select dbo.fn_getmonthlastday(2013,12) '月份最后一天'/*月份最后一天--------------------2013/12/31(1 row(s) affected)*/ 你就把变量改改就行了,last_day在sqlserver中没有这个函数,你这个貌似是Oracle的吧?19991231这个只是基准,可以不用,你可以自己改一下,另外你先说清楚你要在Oracle运行的还是sqlserver的,谢谢啦,用的SQLServer2008R2 谢谢啦,用的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-01select 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())--267select DATEADD(MONTH,DATEDIFF(MONTH,'19911231',GETDATE()),'19911231')--2014-03-31 00:00:00.000这个表达式是先以月为单位,以某个月的最后一天为锚点日期,(19911231),计算它和给定日期的差值,把这个差值记为 diff ,之后再把 diff个月加到锚点日期上,就得到了给定日期所在月份的最后一天锚点日期可以换,不过必须是某月的最后一天 IP不够3位补0,去除小数点,能互转 转让手里的部分书,需要的找我 求教select in 语句 求一SQL语句 关于备份事务日志的疑问 请问SQL如何做到显示的字段名称换行 关于触发器引起的锁表问题! 怎么知道存储过程返回的多行数据,有几列,每一列的标题是什么 sql2000能否通过企业管理器连接上另一台机的sql2005并且做复制? 提示无法定位程序输入点 _lc_collate_cp于动态链接库 MSVCRT.DLL上 两个表链接 求语句
SET @a='2014-03-15'
SELECT DATEADD(month, DATEDIFF(month, '19991231', @a), '19991231');
last_day(to_date('2014-03-15','yyyy-mm-dd'))
和这个有什么不同啊
还有我们一定要用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 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个月加到锚点日期上,就得到了给定日期所在月份的最后一天
锚点日期可以换,不过必须是某月的最后一天