특별하고 엄청난건 아니지만 나중에 스케줄 관련한 기능을 개발 할 때 참조하면 괜찮을 듯 합니다.
1. SQL 문
WITH t AS
(
--시작일자
SELECT DATEADD(d, 0, '201509'+'01') dt
UNION ALL
--종료일자
SELECT DATEADD(d, 1, dt) dt
FROM t
WHERE dt + 1 < DATEADD(m, 1, '201509'+'01')
)
SELECT [1] 일
, [2] 월
, [3] 화
, [4] 수
, [5] 목
, [6] 금
, [7] 토
FROM (SELECT DATEPART(d, dt) d
, DATEPART(w, dt) w
, DATEPART(ww, dt) ww
FROM t
) a
PIVOT( MIN(d) FOR w IN
([1], [2], [3], [4], [5], [6], [7]) ) a;
2. 결과 데이터
3. 유의 사항
1) 데이터 베이스의 호환성 수준을 높인 상태에서 해야 합니다. 낮을 경우 'PIVOT' 근처의 구문이 잘못되었습니다. 이 기능을 사용하려면 현재 데이터베이스의 호환성 수준 값을 더 높게 설정해야 합니다. ALTER DATABASE의 SET COMPATIBILITY_LEVEL 옵션에 대해서는 도움말을 참조하십시오. 메시지가 나옵니다.
- DB의 속성 확인은 호환성 수준을 확인하면 됩니다. 설정방법은 위 ALTER..구문의 도움말을 참조하세요.
2) 시작일자와 종료일자의 날수 차이가 100일보다 크면 오류가 발생합니다. 이것도 처리가 가능할 것 같은데 그건 담에 찾아봐야 할 듯 합니다.
- 오류 메시지 : 문이 종료되었습니다. 문이 완료되기 전에 최대 재귀 횟수(100)가 초과되었습니다.
4. Oracle의 경우 SQL문
- 원문 주소에 보시면 Oracle의 경우에도 구문이 있습니다.
- SQL 문
WITH t AS
(
SELECT dt + LEVEL - 1 dt
FROM (SELECT TO_DATE('201503', 'yyyymm') dt
FROM dual)
CONNECT BY LEVEL < = TO_CHAR(LAST_DAY(dt), 'dd')
)
SELECT 일, 월, 화, 수, 목, 금, 토
FROM (SELECT TO_CHAR(dt, 'dd') d
, TO_CHAR(dt, 'd' ) w
, TRUNC(dt, 'd') ww
FROM t
)
PIVOT (MIN(d) FOR w IN
(1 일, 2 월, 3 화, 4 수, 5 목, 6 금, 7 토))
ORDER BY ww;
5. 원문의 주소 : http://www.dbguide.net/knowledge.db?cmd=view&boardUid=185757&boardConfigUid=20&boardStep=1&categoryUid=206
'IT > Database' 카테고리의 다른 글
[MSSQL]권한 및 테이블 복사, 업데이트(Update) Query (0) | 2018.07.09 |
---|---|
[MSSQL] sqlcmd 활용하기. (0) | 2018.07.06 |
관계형 데이터 모델 (0) | 2018.05.18 |
[Oracle] MSSQL을 Oracle로 컨버전 작업 시 참조 (0) | 2018.04.30 |
[NoSQL] MongoDB 아키텍쳐 (0) | 2018.04.26 |
[NoSQL] MongoDB (문서, 콜렉션 ,데이터베이스) (0) | 2018.04.26 |
[NoSQL] Mongo DB 설치 법입니다 (0) | 2018.04.26 |
[DB] 데이터모델링이란 (0) | 2018.04.21 |