하루 10분 SQL (위키북스, 한상일 지음)에서 독학하며 모르거나 중요한 부분을 기록한 것 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=16395921
하루 10분 SQL
《하루 10분 SQL》은 데이터베이스를 처음 접하는 사용자와 초급 개발자를 대상으로 SQL을 쉽게 익힐 수 있도록 구성한 입문서이다. 먼저 실습에 필요한 이론을 배운 후 데이터베이스 시스템 개발
book.naver.com
1. SYSDATE (현재 일시 구하기)
- SYSDATE -> 현재일시(YYYY/MM/DD HH:MI:SS)
- CURRENT_DATE -> 현재일시(YYYY/MM/DD HH:MI:SS)
- SYSDATE + 수치 -> 현재일시에서 수치 이후의 일시
- SYSDATE - 수치 -> 현재일시에서 수치 이전의 일시
예제 1) SYSDATE와 CURRENT_DATE로 현재 일시 검색하기
SELECT SYSDATE, CURRENT_DATE
FROM DUAL;
[실행결과]
예제 2) 현재 일시를 기준으로 30일 전, 60일 이후 일시를 출력하기
SELECT SYSDATE - 30, SYSDATE + 60
FROM DUAL;
[실행결과]
예제 3) 현재 일시를 기준으로 3시간 이후의 일시를 출력하기
- 1초 = 1/86400 -> 하루(1일)을 초로 바꾸면 86,400초
- 1분 = (1/86400) * 60
- 1시간 = (1/86400) * 60 * 60
- 1일 = (1/86400) * 60 * 60 * 24
SELECT SYSDATE, SYSDATE + ((1/86400) * 60 * 60 * 3) AS CHG_DTTM
FROM DUAL;
[실행결과]
2. SYSDATE - TO_CHAR() (날짜를 문자로 바꾸기)
예제 1) 현재 일시를 'YYYYMMDD' 형식의 문자로 바꾸기
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') AS TODAY
FROM DUAL;
[실행결과]
예제 2) 현재 일시를 12시간 기준으로 'YYYY/MM/DD HH:MI:SS' 형식의 문자로 바꾸기
-> MM : 월, MI : 분을 의미함
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MI:SS') AS TODAY_TM
FROM DUAL;
[실행결과]
예제 3) 현재 일시를 24시간 기준으로 'YYYY/MM/DD HH:MI:SS' 형식의 문자로 바꾸기
-> 시간을 나타내는 'HH24' 부분은 '17'로 보이므로 24시간 단위이며 이를 'HH'로 바꾸면 12시간 단위인 '5'로 표시
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') AS TODAY_TM
FROM DUAL;
[실행결과]
3. SYSDATE - TO_DATE() (날짜형식 문자열을 날짜로 바꾸기)
예제 1) '20190820' 문자열을 날짜로 바꾸기
SELECT TO_DATE('20190820140245') AS DT
FROM DUAL;
[실행결과]
예제 2) 2019년 8월 20일 기준으로 5일 후의 날짜를 구하기
-> TO_DATE() 함수에 '20190820' 문자열을 매개변수로 넣어 날짜로 바꾸고, 5일을 더한 날짜 값을 TO_CHAR() 함수에 'YYYY-MM-DD'와 함께 매개변수로 넣어 '2019-08-25'라는 문자열로 바꾸기
SELECT TO_CHAR(TO_DATE('20190820') + 5, 'YYYY-MM-DD') AS CHG_DT
FROM DUAL;
[실행결과]
예제 3) 현재 일시에서 고객 테이블의 생년월일을 빼고 365일로 나눠 현재일 기준의 고객 나이를 구하기
-> BIRTH_DAY를 TO_DATE() 함수를 이용해 날짜로 바꾸고, 현재 일시에서 뺀 후 365로 나누어 ROUND() 함수로 소수점 1자리까지 표시
SELECT CUSTOMER_CD, CUSTOMER_NM, MW_FLG, BIRTH_DAY,
ROUND((SYSDATE - TO_DATE(BIRTH_DAY)) / 365, 1) AS YEAR_TERM
FROM TB_CUSTOMER
WHERE CUSTOMER_CD IN ('2017042', '2017053');
[실행결과]
4. NEXT_DAY() (지정일 이후의 날짜 구하기)
NEXT_DAY(기준일자, 요일문자열(또는 요일번호))
- 요일문자열 : 일요일, 월요일, 화요일, 수요일, 목요일, 금요일, 토요일 또는 일, 월, 화, 수, 목, 금, 토
- 요일번호 : 1(일), 2(월), 3(화), 4(수), 5(목), 6(금), 7(토)
예제) 2019년 8월 20일 이후 금요일 날짜를 구하기
-- 방법 1
SELECT TO_CHAR(NEXT_DAY('20190820', '금요일'), 'YYYY-MM-DD') AS NEXT_DAY
FROM DUAL;
-- 방법 2
SELECT TO_CHAR(NEXT_DAY('20190820', 6), 'YYYY-MM-DD') AS NEXT_DAY
FROM DUAL;
[실행결과]
5. LAST_DAY() (지정한 특정 월의 마지막 날짜 구하기)
예제) 2019년 5월 20일, 2019년 9월 3일, 현재 일시를 포함하는 각 월읭 마지막 날짜를 구하기
SELECT SYSDATE AS CUR_DATE,
LAST_DAY('20190520') AS "5_MONTH_LAST_DAY",
LAST_DAY('20190903') AS "9_MONTH_LAST_DAY",
LAST_DAY(SYSDATE) AS "CUR_LAST_DAY"
FROM DUAL;
[실행결과]
6. ADD_MONTHS() (지정일에 개월을 더하기)
예제) 현재 일시를 기준으로 2개월 전과 2개월 후의 날짜를 'YYYY-MM-DD' 형식으로 구하기
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS CUR_DATE,
TO_CHAR(ADD_MONTHS(SYSDATE, -2), 'YYYY-MM-DD') AS "2_BF_MON_DAY", -- 2개월 전
TO_CHAR(ADD_MONTHS(SYSDATE, 2), 'YYYY-MM-DD') AS "2_AFT_MON_DAY" -- 2개월 후
FROM DUAL;
[실행결과]
7. MONTHS_BETWEEN() (날짜 차이를 개월로 구하기)
예제) 고객코드가 '2019001'인 고객의 최근 적립 사항을 확인하기 위해 포인트 테이블에 고객 포인트 적립 내용을 등록한 일시를 현재 일시와 비교해 개월 차이를 구하기
SELECT CUSTOMER_CD, SEQ_NO, POINT_MEMO, POINT, REG_DTTM,
TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 현재일자,
ROUND(MONTHS_BETWEEN(SYSDATE, TO_DATE(REG_DTTM)), 1) AS 개월차
FROM TB_POINT
WHERE CUSTOMER_CD = '2019001';
[실행결과]
'Data analysis > 개념(SQL)' 카테고리의 다른 글
SQL 문자열 관련 함수 (0) | 2022.04.21 |
---|---|
SQL 수치 관련 함수 (0) | 2022.04.08 |
SQL 집합 명령어 (0) | 2022.04.02 |
SQL 명령어와 함수 (3) (0) | 2022.04.01 |
SQL 명령어와 함수 (2) (0) | 2022.04.01 |