728x90
오늘 과장님께서 주신 과제가 있어서
과제를 푸는데 과제 내용은 쿼리로 달력을 만드는것!
그래서 내가 구현한 방법은 총 3가지였다!
#1 Case 문을 이용하는 방법!
select
min(case when WEEKDAY = 1 then DDAY end) AS 일,
min(case when WEEKDAY = 2 then DDAY end) AS 월,
min(case when WEEKDAY = 3 then DDAY end) AS 화,
min(case when WEEKDAY = 4 then DDAY end) AS 수,
min(case when WEEKDAY = 5 then DDAY end) AS 목,
min(case when WEEKDAY = 6 then DDAY end) AS 금,
min(case when WEEKDAY = 7 then DDAY end) AS 토
from (
select
TRUNC(TODAY + LEVEL-1, 'D') as WEEKS,
TO_CHAR(TODAY + LEVEL-1, 'D') as WEEKDAY,
LEVEL as DDAY
from(
select TO_DATE(&testDay, 'YYYYMM') AS TODAY from DUAL
) DUAL
connect by LEVEL <= TO_CHAR(LAST_DAY(TODAY), 'DD'))
group by WEEKS
order by 7;
#2 Decode를 이용하는 방법!
select
min(decode(WEEKDAY, 1, DDAY)) AS 일,
min(decode(WEEKDAY, 2, DDAY)) AS 월,
min(decode(WEEKDAY, 3, DDAY)) AS 화,
min(decode(WEEKDAY, 4, DDAY)) AS 수,
min(decode(WEEKDAY, 5, DDAY)) AS 목,
min(decode(WEEKDAY, 6, DDAY)) AS 금,
min(decode(WEEKDAY, 7, DDAY)) AS 토
from (
select
TRUNC(TODAY + LEVEL-1, 'D') as WEEKS,
TO_CHAR(TODAY + LEVEL-1, 'D') as WEEKDAY,
LEVEL as DDAY
from(
select TO_DATE(&testDay, 'YYYYMM') AS TODAY from DUAL
) DUAL
connect by LEVEL <= TO_CHAR(LAST_DAY(TODAY), 'DD'))
group by WEEKS
order by 7;
Decode는 if else와 동일하다고 생각하면 된다.
#3 PIVOT을 이용하는 방법
select 일, 월, 화, 수, 목, 금, 토 from (
select
TRUNC(TODAY + LEVEL-1, 'D') as WEEKS,
TO_CHAR(TODAY + LEVEL-1, 'D') as WEEKDAY,
LEVEL as DDAY
from(
select TO_DATE(&testDay, 'YYYYMM') AS TODAY from DUAL
) DUAL
connect by LEVEL <= TO_CHAR(LAST_DAY(TODAY), 'DD')
)
PIVOT(MAX(DDAY) for WEEKDAY in ('1' as 일, '2' as 월, '3' as 화, '4' as 수, '5' as 목, '6' as 금, '7' as 토))
order by WEEKS;
위와 같이 3가지의 쿼리로 구현할 수 있다.
Last_Day, Trunc, To_Char, Level을 이용하여 구현했는데
여기서 &testDay는 내가 입력받는 연월이다.
저기서 'YYYYMM'은 연월을 표현하는 것!
만약에 연월일을 받고 싶다면 'YYYYMMDD'를 하면 된다.
SQL에서 input처럼 값을 입력받는 방법은 &를 사용하면 된다는 점!
오늘 공부하면서 많이 배운점은 To_Char이다.
To_Char이 형변환도 되지만 월~일까지 숫자로 표현을 해준다는 것을 알 수 있었다.
728x90
'DB > SQL' 카테고리의 다른 글
[세무민의 코딩일기] 쉬우면서 어려운 집계함수에 대해서 알아보자! (0) | 2021.07.22 |
---|---|
CRUD와 다양한 SELECT 검색조건에 대해서 자세하게 알아봅시다![DISTINCT, LIKE, IN, BETWEEN 등] (0) | 2021.07.21 |
세무민의 코딩일기 : CodeTable 혹은 ZTable에 대해서 알아봅시다. (0) | 2021.07.21 |
세무민의 코딩일기 : DB 공부할 때 팁! [Group By와 Order By만 잘해도 절반은 먹고 간다. ] (0) | 2021.05.07 |
세무민의 코딩일기 : DB 함수 공부하기 (1) | 2021.04.18 |