[데이터베이스 SQL 완전정복 목차]
안녕하세요 양햄찌 블로그 주인장입니다.
오늘은 정말정말 자주 쓰이는 sysdate 함수에 대해 작성해보려고 해요.
[목차]
sysdate 함수 사용법
sysdate는 현재 날짜와 시각 정보를 알려줘요.
오늘 이 포스팅을 쓴 날짜는 9월 29일인데요.
더미 테이블에서 단순히 sysdate 값만 확인해보니 '2021-09-29 23:41:53' 요렇게 값이 찍혔네요! 아주 간단하죠??
참고로 sysdate는 기본적으로 DATE타입입니다!
sysdate가 유용한 이유! 숫자와 산술연산 가능
sysdate가 많이 쓰이는 이유는 마이너스 플러스 등의 산술 연산이 가능하기 때문입니다!
SELECT SYSDATE-1 FROM DUAL; --현재날짜정보에서 -1 (어제)
SELECT SYSDATE FROM DUAL; -- 현재날짜정보 (오늘)
SELECT SYSDATE+1 FROM DUAL; -- 현재날짜정보에서 +1 (내일)
이렇게 어제, 오늘, 내일, 3일뒤, 10일뒤 등등 산술연산으로 표현할 수 있어요.
UNION ALL은 각 결과를 함께 합쳐서 보여주는데요.
위와 같이 SQL을 작성 후 결과를 확인해보니, 위처럼 어제, 오늘, 내일에 맞춰서 날짜가 계산된 것을 확인할 수 있습니다.
DATE 타입끼리의 덧셈 뺄셈은?
DATE 타입끼리 뺄셈은 가능하지만 덧셈은 불가합니다.
DATE 타입끼리 뺄셈은 말그대로 두 날짜 사이의 차이 일수인데요. 오늘에서 어제 빼면 1일인거죠.
그런데 사실 2021.09.30일 더하기 2021.03.21일 이건 말로 풀어봐도 말이 안되잖아요? 일수나 시간을 더하는거면 몰라도 날짜를 더한다는거 자체가 논리적으로 맞지 않기 때문에 오라클에서는 날짜끼리의 뺄셈을 지원하지 않습니다
참고로 덧셈을 시도했을 때에는 이렇게 에러가 뜨네요 ㅎㅎ
원하는 포맷으로 날짜시간 정보를 확인하고 싶을 때
■ 날짜
sysdate를 조회하면 결과가 기본적으로 YYYY-MM-DD HH:MI:SS 이렇게 나왔잖아요.
시간정보는 필요하지 않고 날짜도 간단하게 YYYYMMDD 이렇게 나타내고 싶을 때에는 어떻게 해야할까요?
SELECT TO_CHAR(SYSDATE, 'yyyymmdd') FROM DUAL; -- 20210929
SELECT TO_CHAR(SYSDATE, 'yyyy mm dd') FROM DUAL; -- 2021 09 29
SELECT TO_CHAR(SYSDATE, 'yyyy/mm/dd') FROM DUAL; -- 2021/09/29
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd') FROM DUAL; -- 2021-09-29
SELECT TO_CHAR(sysdate, 'YYYYMM') FROM DUAL; -- 202109
SELECT TO_CHAR(sysdate, 'MM') FROM DUAL; -- 09
SELECT TO_CHAR(SYSDATE, 'yyyy"년"mm"월"') FROM DUAL; 2021년9월
데이터 타입을 변경해주는 함수 TO_CHAR를 이용해 위처럼 원하는 형태로 사용하면 됩니다!
나중에 따로 다뤄보겠지만 TO_CHAR과 같은 데이터타입 변경 함수는, DATE 타입을 사용자가 원하는 형태의 CHAR로 변경하고 싶을때 사용하는 함수입니다.
중간에 내가 원하는 문자열을 끼워넣고 싶을 경우 맨 마지막 예제처럼 큰따옴표를 사용하면 됩니다.
이 외에 MONTH를 쓰시면 '9월' 이렇게 월까지 표기해줘요. 영어의 경우 SEPTEMBER 이렇게 뜨겠죠?
■ 시간
SELECT TO_CHAR(SYSDATE, 'hhmiss') FROM DUAL; -- 121427
SELECT TO_CHAR(SYSDATE, 'hh:mi:ss') FROM DUAL; -- 12:14:27
SELECT TO_CHAR(SYSDATE, 'hh-mi-ss') FROM DUAL; -- 12-14-27
SELECT TO_CHAR(SYSDATE, 'hh"시"mi"분"') FROM DUAL; -- 12시27분
SELECT TO_CHAR(SYSDATE, 'mi') FROM DUAL; --14
SELECT TO_CHAR(SYSDATE, 'missss') FROM DUAL; --142702
SELECT TO_CHAR(SYSDATE, 'amhh') FROM DUAL; --오전12
몇월 할때 '월'에 해당하는 코드가 mm이라, 분에서는 이와 겹치지 않게 mi를 사용합니다 (minute의 약자겠죠?)
실수로라도 hhmmss라고 쓰지 않도록 주의~
■ 요일
참고로 요일을 표기하고 싶을 때에는 DY를 사용하면 됩니다!
Dy는 약어를 DAY는 요일 전체를 표시해줍니다.
■ 사용예제
EMPLOYEES 샘플 테이블에서 최근 3일내에 고용된 직원 정보를 추출하고 싶을 경우 쿼리를 어떻게 짜면 될까요??
SELECT *
FROM EMPLOYEES e
WHERE HIRE_DATE >= TO_CHAR(sysdate-3, 'YYYY-MM-DD')
이런식으로 짜면 되겠죠? ㅎㅎ 저도 회사에서 오늘 기점을기준으로 거래 검색할 때 자주 사용하는 쿼리입니다.
마무리~
이 외에도 날짜를 자유자재로 다룰 수 있도록, 오라클은 Months_between, Next_day, Last_day, Add_months 등 다양한 함수를 지원하고 있는데요~~
날짜관련된 함수는 포스팅을 따로 빼서 알아보도록 할게요~~!
도움이 되셨다면 공감은 어떤가요?
'별걸다하는 IT > 데이터베이스 Database' 카테고리의 다른 글
[SQL] 오라클 over절에 대해 알아보자 - 개념 및 사용법 정리 (3) | 2021.10.01 |
---|---|
[SQL] GROUPING 완벽히 이해하고 사용하기, NULL값 '총합'으로 변경 (4) | 2021.09.30 |
[SQL] 정렬하기 order by 쿼리 사용법 1, 2 desc 의미 (0) | 2021.08.24 |
[오라클 SQL] ROWNUM - 특정 개수의 행만 조회하기, 행 번호 매기기 rownum = 2, order by rownum (0) | 2021.06.10 |
[SQL] 순위 매기는 함수 - ROW_NUMBER(), RANK(), DENSE_RANK() (1) | 2021.05.20 |
최신 댓글