SQL - 获取传递日期时间的自定义日期开始日期时间
问题描述:
我正在处理需求,其中一天从最后一天的23:00开始。 我需要将日期开始日期时间传递给SQL函数。我们现在在表格中存储自定义的一天开始时间(即23:00)和offset = -1
(意味着最后一天开始)。
例如如果我通过:SQL - 获取传递日期时间的自定义日期开始日期时间
-
10/30/2013 22:00
它应该返回10/29/2013 23:00
-
10/30/2013 23:20
它应该返回10/30/2013 23:00
-
10/31/2013 01:00
它应该返回10/30/2013 23:00
目前我使用下面的语句:(DayStartOffset = -1 and DayStartTime = 23:00:00)
declare @datetime datetime
set @datetime = '2013-10-30 23:59:59'
declare @date date
declare @time time(3)
set @date = @datetime
set @time = @datetime
declare @dayStartDateTime datetime
--DayStartOffset is set to -1
--DayStartTime set to '23:00'
SELECT @dayStartDateTime = DATEADD(dd,DayStartOffset,CAST(@date AS DATETIME)) + CAST(DayStartTime AS DATETIME)
from table_name
print @dayStartDateTime
但它无法正确工作1和3以上
你能帮我解答这个问题吗?
答
在一个线
Create Function dbo.MyStartOfDay(@datetime datetime) returns datetime as
begin
return dateadd(hour, -1, dateadd(day, datediff(day, 0, dateadd(hour, 1, @datetime)), 0))
end
Go
Select dbo.MyStartOfDay('2013-10-30 22:00');
分拆下来
Create Function dbo.MyStartOfDay(@datetime datetime) returns datetime as
begin
declare @hourLater datetime = dateadd(hour, 1, @datetime)
declare @roundToDay datetime = dateadd(day, datediff(day, 0, @hourLater), 0);
declare @hourBack datetime = dateadd(hour, -1, @roundToDay)
return @hourBack
end
换句话说,添加一个小时,圆到最接近的日子然后需要一个小时关闭。
+0
谢谢你的帮助.. – meetsur
您正在使用的SQL Server版本? – Michael
我正在使用sql 2012 – meetsur