SQL-获取已传递日期时间的自定义日期开始日期时间
我正在按照要求工作,当天从最后一天23:00开始。 我需要获取传递给SQL函数的日期的开始日期时间。我们现在在表中存储自定义日开始时间(即23:00)和SQL-获取已传递日期时间的自定义日期开始日期时间,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我正在按照要求工作,当天从最后一天23:00开始。 我需要获取传递给SQL函数的日期的开始日期时间。我们现在在表中存储自定义日开始时间(即23:00)和offset=-1(表示从最后一天开始)。 e、 g.如果我通过: 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 目前我正在使用以下语句:(DayStartOffse
offset=-1
(表示从最后一天开始)。e、 g.如果我通过:
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和DayStartTime=23:00:00)
但是,对于上述示例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
换句话说,加上一个小时,四舍五入到最近的一天,然后休息一个小时
您使用的是哪个版本的sql server?
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