繁体   English   中英

SQL 日期时间需要读取 00:00:00.000

[英]SQL datetime needs to read 00:00:00.000

我有以下一段 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 格式)

select dateadd(d,datediff(d,0,dateadd(s,-1,dateadd(m,datediff(m,0,getdate()),0))),0)
SELECT DATEADD(MONTH, -1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())))

这将为您提供上个月的最后一秒

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);

除时间信息外,将“删除”全天信息。

去除时间部分的另一种方法是将其转换为浮点数,应用Floor函数并转换回日期时间。

select Cast(Floor(Cast(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) as float)) as datetime)

看到一些类似的帖子

select  cast(cast(dateadd(dd,-1,getdate()) as date) as datetime)

将您的 dateadd 转换为日期,然后将其包含在另一个转换回日期时间中

所以它从这个 2012-02-29 23:59:59.000

至此 2012-02-29

最后这个 2012-02-29 00:00:00.000

SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

在 SQL Server 2012 中,您可以使用eomonth

SELECT EOMONTH(DATEADD(MONTH, -1, GETDATE()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM