database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2535 게시물 읽기
No. 2535
달력 테이블 만들기
작성자
전융
작성일
2005-12-07 11:27
조회수
8,011

--달력테이블//

create table Calendar (

idx [int] IDENTITY (1, 1) NOT NULL ,

yyyy char(4) not null,

mm char(2) not null,

dd char(2) not null,

flag char(1) not null

)

--//입력쿼리

insert into Calendar

select

SUBSTRING(CONVERT(VARCHAR(8), GETDATE(),112),1,4) as yyyy,

SUBSTRING(CONVERT(VARCHAR(8), GETDATE(),112),5,2) as mm,

SUBSTRING(CONVERT(VARCHAR(8), GETDATE(),112),7,2) as dd ,

case datepart("dw", getdate())

when 1 then '0'

when 2 then '1'

when 3 then '1'

when 4 then '1'

when 5 then '1'

when 6 then '1'

when 7 then '0'

end as B



이렇게 만들어 놓고서

2005년 12월부터 2006년 12월까지의 날짜를 입력하려고 합니다.

어떻게 루프를 돌리면 되는지 알려 주세요


 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

감사합니다.

전융님이 2005-12-07 13:10에 작성한 댓글입니다. Edit

-- 임시테이블 생성

select top 400
     IDENTITY(int, 1, 1) no
into #temp_no
from zipcode  --> 1년 보다 큰테이블 아무거나.

 

-- 삽입

insert into Calendar
select convert(char(4), new_date, 112)          yyyy
      ,right(convert(char(6), new_date, 112),2) mm
      ,right(convert(char(8), new_date, 112),2) dd
      ,case when datepart(dw, new_date) in (1, 7)
               then '0'
               else '1'
       end                                      flag
from (
     select cast('20041201' as datetime) + no - 1 new_date
     from #temp_no a
     where cast('20041201' as datetime) + no - 1 <= cast('20051231' as datetime)
     ) a

 

-- 임시테이블 삭제

drop table #temp_no

 

-- 임시테이블을 만들기 힘들때

-- 기존테이블을 이용하여 만드는 법

select convert(char(4), new_date, 112)          yyyy
      ,right(convert(char(6), new_date, 112),2) mm
      ,right(convert(char(8), new_date, 112),2) dd
      ,case when datepart(dw, new_date) in (1, 7)
               then '0'
               else '1'
       end                                      flag
from (
     select cast('20041201' as datetime) + no - 1 new_date
     from (
          select top 400
                  (select count(*)
                   from temp_no b
                   where a.unique_col >= b.unique_col) no
          from tab1 a  --> row수가 400보다 크고 유니크한 컬럼을 가진 테이블
          ) a
     where cast('20041201' as datetime) + no - 1 <= cast('20051231' as datetime)
     ) a

m님이 2005-12-10 00:49에 작성한 댓글입니다.
이 댓글은 2005-12-10 01:09에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2538sp 사용유무 [1]
왕초보
2005-12-08
1911
2537으하하~ 조때따~ㅋㅋㅋ [1]
아침에농약한잔
2005-12-08
2450
2536[질문]구분자를 잘라 테이블 변수에 저장하기
창밖의그녀
2005-12-07
2281
2535달력 테이블 만들기 [2]
전융
2005-12-07
8011
2534테이블구성 및 index에 대해서 [8]
김지환
2005-12-07
4346
2533access질문 입니다. select [2]
이재기
2005-12-06
3075
2532파라미터가 있는 Stored Procecdure
김정이
2005-12-06
2043
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다