我有以下SQL:
select DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
以这种格式出现:
2012-02-29 23:59:59.000
我需要具有相同日期的确切代码段,但时间部分必须读取00:00:00.000
修改*我应该在这里明确:我需要在任何给定的时间(上午00:00:00.000格式的时间)上个月的最后一天
答案 0 :(得分:5)
select dateadd(d,datediff(d,0,dateadd(s,-1,dateadd(m,datediff(m,0,getdate()),0))),0)
答案 1 :(得分:3)
SELECT DATEADD(MONTH, -1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())))
答案 2 :(得分:3)
这将为您提供上个月的最后一秒
select dateadd(s,-1,dateadd(month,datediff(month,0,GETDATE()),0));
这将为您提供上个月的最后一天
select dateadd(day,-1,dateadd(month,datediff(month,0,GETDATE()),0));
有关如何执行此操作的更多详细信息:
select dateadd(day,datediff(day,0,@datetime),0);
或
select dateadd(day,datediff(day,0,GETDATE()),0);
英文:记下此日期与0之间的天数,并将这些天数添加到0。
这适用于datediff的任何参数。所以
select dateadd(month,datediff(month,0,GETDATE()),0);
除了时间信息外,还会“删除”所有日期信息。
答案 3 :(得分:2)
去除时间部分的另一种方法是将其转换为浮点数,应用Floor
函数并转换回日期时间。
select Cast(Floor(Cast(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) as float)) as datetime)
答案 4 :(得分:0)
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))
在SQL Server 2012中,您可以使用eomonth
。
SELECT EOMONTH(DATEADD(MONTH, -1, GETDATE()))
答案 5 :(得分:0)
看到了一些类似的帖子
选择演员表(cast(cast(dateadd(dd,-1,getdate())作为日期)作为datetime)
将您的dateadd设置为日期,然后将其附加到另一个强制转换为datetime的位置
所以从这里开始 2012-02-29 23:59:59.000
对此 2012-02-29
最后是这个 2012-02-29 00:00:00.000