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년마다 한번씩 되도록 등록*/
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 |