随着时间的流逝2359

时间:2014-12-10 07:38:31

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

我正在运行一个程序,我通过DATEADD(day,-1,getdate())使用昨天的日期。挑战在于我的程序在晚上1:30运行,然后返回数据,如

 2014-12-09 01 30

我需要它返回2014-12-09 23 59之类的内容,因为我有一个DATETIME列。有没有人有想法,怎么做?

4 个答案:

答案 0 :(得分:1)

只是为了好玩 - 但这可行,但只能在SQL Server中使用datetime数据类型:

SELECT CAST((FLOOR(CAST(GETDATE() AS FLOAT))) -0.0006944444 AS DATETIME)

这给你昨天23:59:00

在SQL Server中,DATETIME数据类型在内部像float一样处理,因此通过将其转换为float并将其放置,它将返回datetime的值,该值仅包含日期部分。然后我减去相当于一分钟的浮点数并将其作为日期时间转换回来

然而,更正确的方法是使用适当的函数,所以:

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

这会计算没有时间部分的当前日期,然后减去一分钟。

答案 1 :(得分:1)

这将是:

SELECT dateadd(minute,-1,DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0))

答案 2 :(得分:1)

我在SP中使用了类似下面的东西:

SELECT Cast(Getdate()-1 AS DATE)
       + Cast('23:59:00' AS DATETIME) 

答案 3 :(得分:0)

我不明白为什么你想要前一天23:59,但你可以使用这样的东西:

SELECT DATEADD(MINUTE,-1,CONVERT(DATETIME,CONVERT(DATE,GETDATE()))))