2012-10-22 5 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

왜 당신이 timerange을 추가 DATEADD를 사용하지 않는? – 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