SQL-获取已传递日期时间的自定义日期开始日期时间

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

我正在按照要求工作,当天从最后一天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
  • 目前我正在使用以下语句:
    (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