我正在运行一个程序,我通过DATEADD(day,-1,getdate())
使用昨天的日期。挑战在于我的程序在晚上1:30运行,然后返回数据,如
2014-12-09 01 30
我需要它返回2014-12-09 23 59
之类的内容,因为我有一个DATETIME
列。有没有人有想法,怎么做?
答案 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()))))