SQL datetime需要读取00:00:00.000

时间:2012-03-29 10:50:53

标签: sql sql-server sql-server-2008 tsql

我有以下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格式的时间)上个月的最后一天

6 个答案:

答案 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