http://database.sarang.net/?inc=read&aid=3192&criteria=mssql&subcrit=&id=30&limit=20&keyword=insert&page=12

DECLARE @s_date smalldatetime
               ,@e_date smalldatetime
               ,@temp_date smalldatetime
               ,@i int
               ,@j int

DECLARE @temp TABLE
(
  date smalldatetime
)

SELECT  @s_date = '20061001' , @e_date='20061003',@i = DATEDIFF(day, @s_date,@e_date),@j=0

SET @temp_date= @s_date

WHILE @i>=@j
BEGIN
      INSERT INTO @temp(date)  values(@temp_date)
      SET @j=@j +1;
      SET @temp_date= DATEADD(dd,@j,@s_date)
END

 SELECT  CONVERT(char(10), date,112) AS date FROM  @temp

-> 20061001
     20061002
     20061003

간략히 살펴보면 변수선언/시작-끝 날짜 차이만큼 루프 돌면서 그 사이의 날짜를 임시테이블에 저장하는 방식.
MSSQL문법은 잘 모르겠으나 찾던 정보임..

시작부터 끝까지 한번에 실행해야되더라.. MS SQL Server Management Studio Express에서.

내 소스. 정보를 통계용 날짜 테이블에 넣었다


/*시스템 날짜 구하듯이, 데이타 없이 특정 기간 내의 날짜를 전부 구하는 방법*/
DECLARE @s_date smalldatetime
               ,@e_date smalldatetime
               ,@temp_date smalldatetime
               ,@i int
               ,@j int

DECLARE @temp TABLE
(
  date smalldatetime
)

SELECT  @s_date = '20010101' , @e_date='20501231', @i = DATEDIFF(day, @s_date,@e_date), @j=0

SET @temp_date= @s_date

WHILE @i>=@j
BEGIN
    INSERT INTO @temp(date)  values(@temp_date)
    SET @j=@j +1;
    SET @temp_date= DATEADD(dd,@j,@s_date)
END

/*SELECT date FROM @temp*/
INSERT INTO DUAL_CALENDAR
    SELECT
        DATENAME(yy, date), DATENAME(mm, date),
        /*DATENAME(dd, date), */
        SUBSTRING(CONVERT(char(10), date,121), 9, 10),
        CONVERT(char(10), date,121) AS date
    FROM  @temp
/*여기까지 한번에 실행할 것. 100년까지는 한번에 안되는듯. 50년은 됨.
50년 마다 한번씩 실행되게 스케줄러에 등록 또는 1년마다 한번씩 되도록 등록*/

'프로그래밍 > DB' 카테고리의 다른 글

[펌] MSSQL 날짜 함수  (0) 2009.01.14
[펌] date 타입 변환 함수  (0) 2009.01.14
ORLCLE->MSSQL  (0) 2009.01.14
[펌/DB관련팁] 일간/월간/연간 통계 시  (0) 2009.01.09
[펌] MySQL 사용하기  (0) 2008.11.25