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

问题描述:

我正在处理需求,其中一天从最后一天的23:00开始。 我需要将日期开始日期时间传递给SQL函数。我们现在在表格中存储自定义的一天开始时间(即23:00)和offset = -1(意味着最后一天开始)。
例如如果我通过:SQL - 获取传递日期时间的自定义日期开始日期时间

  1. 10/30/2013 22:00它应该返回10/29/2013 23:00
  2. 10/30/2013 23:20它应该返回10/30/2013 23:00
  3. 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以上

你能帮我解答这个问题吗?

+0

您正在使用的SQL Server版本? – Michael

+0

我正在使用sql 2012 – meetsur

在一个线

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 

换句话说,添加一个小时,圆到最接近的日子然后需要一个小时关闭。

Example SQLFiddle

+0

谢谢你的帮助.. – meetsur