SQL #08 숫자 / 날짜 함수

underlier12·2020년 2월 6일

SQL

목록 보기
8/8

25. 숫자 내장 함수

절대값 ABS

SELECT ABS(35), ABS(-35) FROM DUAL; -- 35, 35

부호 SIGN

SELECT SIGN(35), SIGN(-35), SIGN(0) FROM DUAL; -- 1, -1, 0

반올림 ROUND

SELECT ROUND(34.4567), ROUND(34.567) FROM DUAL; -- 34, 35
SELECT ROUND(12.3456, 2), ROUND(12.34556, 3) FROM DUAL; -- 12.35, 12.346

몫, 나머지 TRUNC, MOD

SELECT TRUNC(17/5), MOD(17, 5) FROM DUAL; -- 3, 2

제곱, 제곱근 POWER, SQRT

SELECT POWER(5, 2), SQRT(25) FROM DUAL; -- 25, 5

26. 날짜 함수

현재 시간

SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL;

image.png

SYS는 오라클 서버 시간이며 CURRENT는 현지 시간이다

현재 시간 및 포맷 변경

ALTER SESSION SET TIME_ZONE = '-08:00';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

image.png

TIMESTAMP는 milli-second까지 반환한다

추출

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL;

문제

가입 회원 중에 비수가(2, 3, 11, 12)월 달에 가입한 회원 조회

SELECT * FROM MEMBER WHERE EXTRACT (MONTH FROM REGDATE) IN (2, 3, 11, 12);

누적

SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;

문제

가입 회원 중에 가입한지 6개월이 안되는 회원 조회

SELECT * FROM MEMBER WHERE ADD_MONTHS (SYSDATE, -6) < REGDATE;

차이

SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2013-12-25')) FROM DUAL;

다음 요일

다가오는 가장 빠른 요일에 해당되는 날짜를 반환

SELECT NEXT_DAY(SYSDATE, '토요일') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, '토') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, 7) FROM DUAL;

두 번째 인자는 1~7로 1이 일요일을 의미한다

달의 마지막 일

SELECT LAST_DAY(SYSDATE) FROM DUAL;

날짜 반올림 / 자르기

SELECT ROUND(SYSDATE, 'CC'), TRUNC(SYSDATE, 'CC') FROM DUAL; -- CC : 한세기 단위
SELECT ROUND(SYSDATE, 'YEAR'), TRUNC(SYSDATE, 'YEAR') FROM DUAL; -- YEAR : 년 단위
SELECT ROUND(SYSDATE, 'Q'), TRUNC(SYSDATE, 'Q') FROM DUAL; -- Q  : 분기 단위
SELECT ROUND(SYSDATE, 'MONTH'), TRUNC(SYSDATE, 'MONTH') FROM DUAL; -- MONTH : 월 단위
SELECT ROUND(SYSDATE, 'W'), TRUNC(SYSDATE, 'W') FROM DUAL; -- W : 주 단위
SELECT ROUND(SYSDATE, 'DAY'), TRUNC(SYSDATE, 'DAY') FROM DUAL; -- DAY : 일 단위
SELECT ROUND(SYSDATE, 'D'), TRUNC(SYSDATE, 'D') FROM DUAL; -- D : 일 단위
SELECT ROUND(SYSDATE, 'HH'), TRUNC(SYSDATE, 'HH') FROM DUAL; -- HH : 시 단위
SELECT ROUND(SYSDATE, 'MI'), TRUNC(SYSDATE, 'MI') FROM DUAL; -- MI : 분 단위
profile
logos and alogos

0개의 댓글