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

6

我有以下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 CAST(s AS DATE) 还是 SELECT CAST(CAST(s As Date) As DateTime) - Seph
6个回答

5
select dateadd(d,datediff(d,0,dateadd(s,-1,dateadd(m,datediff(m,0,getdate()),0))),0)

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

2
这样不行,因为他正在从当前月份减去一个月。 - general exception
SELECT DATEADD(MONTH, -1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))) - Darren
你误解了问题。他想要在三月份的所有日期中使用2012-02-29 00:00:00.000 - Mikael Eriksson
@MikaelEriksson OP已修改问题,看起来他想以所述格式(不带时间)返回上个月的最后一天。 - general exception
1
@generalexception - 是的,我一直都是这么想的。而且你的回答也正是如此。 - Mikael Eriksson
显示剩余7条评论

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

or

select dateadd(day,datediff(day,0,GETDATE()),0);

在中文中:获取当前日期与0之间的天数,并将这些天数加到0上。
对于datediff的任何参数,此方法都适用。
所以
select dateadd(month,datediff(month,0,GETDATE()),0);

将“删除”所有日期信息以及时间信息。

2

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

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

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

在 SQL Server 2012 中,您可以使用 eomonth
SELECT EOMONTH(DATEADD(MONTH, -1, GETDATE()))

我在您的评论中尝试了您建议的日期。它给出了正确的输出吗? - Darren
2
@DarrenDavies - 看看这个,并注意我们的答案和问题中提供的查询之间的日期差异。月底 - Mikael Eriksson

0

看到了一些类似的帖子

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

将您的dateadd转换为日期,然后再将其封装在另一个转换回datetime的转换中

所以它从这里开始 2012-02-29 23:59:59.000

变成这样 2012-02-29

最后变成这样 2012-02-29 00:00:00.000


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接