2014-12-12 3 views
0

분에 대한 시간표를 작성하고내가 두 개의 매개 변수 BEGINDATE을 제공

내가이 코드를 작성하는 방법과 같은

예를

@begindate = '2012-01-01' 
@endate = '2013-01-01' 

결과

begindate    enddate 
2012-01-01 00:00:00 2012-01-01 00:10:00 
2012-01-01 00:10:00 2012-01-01 00:20:00 
2012-01-01 00:20:00 2012-01-01 00:30:00 

을 종료 날짜 MSSQL

create table Test 
(
a datetime, 
b datetime 
) 

DECLARE @BeginDate date = '2012-01-01' 

DECLARE @EndDate date = '2012-12-31' 

DECLARE @beginValue int = 1 

DECLARE @count int = DATEDIFF (day , '2012-01-01' , '2012-12-31') 
DECLARE @dayHours INT = 0 
DECLARE @dayHoursLimit INT = 23 
DECLARE @Minute INT = 0 
DECLARE @MinuteLimit INT= 50 
DECLARE @CountOfMinute INT =10 

while @beginValue <= @count 
begin 

    SET @BeginDate= DATEADD(DAY,1, @BeginDate); 

    WHILE @dayHours <= @dayHoursLimit 
    BEGIN 
     WHILE @Minute <= @MinuteLimit 
     BEGIN 
      insert into TEST 

      SELECT CAST(CAST(@BeginDate AS VARCHAR(10)) +' '+CAST(@dayHours AS varchar(2)) +':'+CAST (@Minute AS varchar(2)) AS datetime) as a , 
      CAST(CAST(@BeginDate AS VARCHAR(10)) +' '+CAST(@dayHours AS varchar(2)) +':'+CAST (@Minute [email protected] AS varchar(2)) AS datetime) as b 
      0 AS B 
      SET @Minute = @Minute + @CountOfMinute  
     END 
    SET @Minute = 0 
    SET @dayHours = @dayHours +1 
END 
    SET @dayHours = 0 
    SET @beginValue = @beginValue +1 
END 
+0

질문에 대한 자세한 설명을 제공해 주실 수 있습니까? 난 네가 무엇을 묻고 있는지 정말로 모른다. ... – Leonardo

답변

0

@BeginDate에서 @EndDate 사이의 10 분 간격마다 하나의 행을 생성하려는 것처럼 보입니다. 그렇다면 재귀 CTE를 사용하십시오.

DECLARE @BeginDate datetime = '2012-01-01' 
DECLARE @EndDate datetime = '2013-01-01' 

;WITH cte AS (
    SELECT @BeginDate AS BeginDate, 
      DATEADD(minute, 10, @BeginDate) AS EndDate 
    UNION ALL 
    SELECT DATEADD(minute, 10, BeginDate), 
      DATEADD(minute, 20, BeginDate) 
    FROM cte 
    WHERE BeginDate < DATEADD(minute,-10,@EndDate) 
) 

SELECT * FROM cte 
OPTION (MAXRECURSION 0) 
+0

고맙다. –

관련 문제