2012-10-22 40 views
0

我需要一天的時間字符串值

「23:59:59」的工作,但會導致延遲

「24:00:00」是行不通的字符串值:錯誤將數據類型varchar轉換爲datetime。

「1.00:00:00」不工作:將數據類型varchar轉換爲datetime時出錯。

這裏是我的代碼:

PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime, 
    @TimeRange datetime 
AS 
BEGIN 

    SET NOCOUNT ON; 

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime); 

    with TimeRanges as (
    select @Start as StartTime, @Start + @TimeRange as EndTime 
    union all 
    select StartTime + @TimeRange, EndTime + @TimeRange 
    from TimeRanges 
    where EndTime < @Finish) 
    select StartTime, EndTime, Count(Test.ScenarioID) as TotalPeaks 
    from TimeRanges as TR left outer join 
     dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime 
    group by TR.StartTime, TR.EndTime 
END 
+4

你爲什麼不使用DATEADD添加TIMERANGE? – Chris

+0

我將時間範圍劃分爲特定時間,例如@TimeRange = 00:05:00.000,然後代碼將其分成5分鐘,並且工作正常,但是當我想要每日報告時,我需要使用「24:00:00.000」或類似「1.00:00:00.000」這意味着1天 – cihata87

回答

1

您正在嘗試使用datetime類型爲時間跨度類型,不會爲你工作。

我建議你改變你的timerange參數爲一個整數。然後指定它是秒,分,小時,天或其他。

如果你決定讓天:

PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime, 
    @TimeRange int 
AS 
BEGIN 

    SET NOCOUNT ON; 

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime); 

    with TimeRanges as (
    select @Start as StartTime, DATEADD(day, @TimeRange, @Start) as EndTime 
    union all 
    select DATEADD(day, @TimeRange, StartTime), DATEADD(day, @TimeRange, EndTime) 
    from TimeRanges 
    where EndTime < @Finish) 
    select StartTime, EndTime, Count(Test.ScenarioID) as TotalPeaks 
    from TimeRanges as TR left outer join 
     dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime 
    group by TR.StartTime, TR.EndTime 
END 
+0

非常感謝你Tobsey – cihata87