날짜 처리 함수
SYSDATE : 시스템에 저장되어 있는 날짜를 반환하는 함수
MONTHS_BETWEEN(날짜, 날짜) : 두 날짜의 개월 수 차이를 숫자로 리턴
→ 몇 개월 차를 구하고 싶을 땐 올림 처리 CEIL
ADD_MONTHS(날짜, 숫자) : 날짜에 숫자만큼 개월 수를 더해서 날짜로 리턴
NEXT_DAY(기준 날짜, 요일(문자|숫자) : 기준 날짜에서 구하려는 요일에 가장 가까운 날짜 리턴
문자 → ‘금요일’, ‘금’
숫자 → 1~7 사이의 숫자. 일요일이 1이다.
FRYDAY는?
시스템 환경에 따라 언어 설정되어 있으므로 변경을 원하며 설정을 변경해서 사용한다
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
LAST_DAY(날짜) : 해당 월의 마지막 날짜를 구하여 리턴
EXTRACT : 년, 월, 일 정보를 추출하여 리턴하는 함수
EXTRACT(YEAR FROM 날짜) : 년도만 추출
EXTRACT(MONTH FROM 날짜) : 월만 추출
EXTRACT(DAY FROM 날짜) : 일만 추출
*근무 년수를 만으로 계산하는 경우에는 월의 차이를 계산해야 한다
FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE) / 12) “만 근무년수”
형변환 함수
TO_CHAR(날짜, [포맷]) : 날짜형 데이터를 문자형 데이터로 변환
TO_CHAR(숫자, [포맷]) : 숫자형 데이터를 문자형 데이터로 변환
9 또는 0으로 자리 수를 지정할 수 있는데 9는 남는 자리를 공백으로, 0은 0으로 채운다.
앞에 L을 붙이면 시스템에서 지정한 화폐 단위를, $는 무조건 $를 붙인다.
0,000 의 경우 1000 단위로 , 가 기입 되며, 주어진 수보다 적은 9를 쓰면 표기불가 된다.
날짜 데이터 포맷 적용 시에도 TO_CHAR 함수 사용
SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL;
-> 오후 24시:분:초
SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM DUAL;
-> 오전 12시:분:초
SELECT TO_CHAR(SYSDATE, 'MON DY, YYYY') FROM DUAL;
-> 1월 토, 2023
SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL;
-> 2023-1-14 토
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') FROM DUAL;
-> 2023-01-14 토
SELECT TO_CHAR(SYSDATE, 'YEAR, Q') || '분기' FROM DUAL;
-> TWENTY TWENTY-THREE, 1분기
날짜에 대해 년도 4자리, 년도 2자리, 년도 이름으로 출력
SELECT
TO_CHAR(SYSDATE, 'YYYY') -> 2023
, TO_CHAR(SYSDATE, 'RRRR') -> 2023
, TO_CHAR(SYSDATE, 'YY') -> 23
, TO_CHAR(SYSDATE, 'RR') -> 23
, TO_CHAR(SYSDATE, 'YEAR') -> TWENTY TWENTY-THREE
FROM DUAL;
RR과 YY의 차이
RR은 두 자리 년도를 네 자리로 바꿀 때 바꿀 년도가 50년 미만이면 2000년을 적용하고, 50년 이상은 1900년을 적용한다.
YY는 년도를 바꿀 때 현재 세기(2000년) 을 적용한다.
SELECT
TO_CHAR(TO_DATE('980630', 'YYMMDD'), 'YYYY-MM-DD')
FROM DUAL;
=> 2098-06-30
SELECT
TO_CHAR(TO_DATE('980630', 'RRMMDD'), 'YYYY-MM-DD')
FROM DUAL;
=> 1998-06-30
오늘 날짜에서 월만 출력
SELECT
TO_CHAR(SYSDATE, 'MM') -> 1
, TO_CHAR(SYSDATE, 'MONTH') -> 1월
, TO_CHAR(SYSDATE, 'MON') -> 1월
, TO_CHAR(SYSDATE, 'RM') -> I ( 로마숫자 )
FROM DUAL;
오늘 날짜에서 일만 출력
DDD → 1년 기준 DDD일 째
DD → 달 기준 DD일 째
D → 주 기준 D일 째
오늘 날짜에서 분기와 요일 출력 처리
Q → 분기
DAY →토요일
DY → 토
- 요일이 DAY 임 !!!!!!!!!!!!!
TO_DATE : 문자 혹은 숫자형 데이터를 날짜형 데이터로 변환하여 리턴
TO_DATE(문자형데이터, [포맷])
TO_DATE(숫자형데이터, [포맷])
문자열은 날짜로 자동 형변환 되나, 숫자는 날짜로 자동 형변환 되지 않는다.
2000년대 이후에 입사한 사원의 사번, 이름, 입사일 조회
SELECT
EMP_NO
, EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE >= TO_DATE('20000101', 'RRRRMMDD');
WHERE HIRE_DATE >= '20000101'
-- 문자열은 날짜로 자동 형변환 된다
WHERE HIRE_DATE >= TO_DATE(20000101, 'RRRRMMDD');
-- WHERE HIRE_DATE >= 20000101;
-- 숫자는 날짜로 자동 형변환 되지 않는다
TO_NUMBER(문자에디터, [포맷]) : 문자 데이터를 숫자로 리턴하는데 대부분 자동 형변환 된다.
SELECT '123' + '456' FROM DUAL;
→ 숫자로 자동 형변환 되어 결과는 579
SELECT '123' + '456A' FROM DUAL;
→ 숫자로 된 문자열만 자동 형변환이 가능하다. 결과 안 나옴.
SELECT '1,000,000' + '500,000' FROM DUAL;
-> , 기호가 있어서 자동 형변환이 안된다. 이 땐 아래처럼 TO_NUMBER를 사용해야 함.
SELECT
TO_NUMBER('1,000,000', '99,999,999') + TO_NUMBER('500,000', '999,999')
FROM DUAL;
NULL 처리 함수
NVL(컬럼명, 컬럼값이 NULL일 때 바꿀 값)
NVL(BONUS, 0) → BONUS가 NULL 일 때 0으로 출력한다.
NVL2(컬럼명, 바꿀값1, 바꿀 값2)
해당 컬럼이 값이 있으면 바꿀값1로 변경, NULL이라면 바꿀값2로 변경
선택 함수 : 여러 가지 경우 선택할 수 있는 기능을 제공
DECODE(계산식|컬럼명, 조건값1, 선택값1, 조건값2, 선택값2, …)
마지막 인자로 조건 값 없이 선택 값을 작성하면 아무런 조건에 해당하지 않을 때(ELSE같이) 마지막에 작성한 선택 값을 무조건 선택한다.
성별을 구분하여 ‘남’또는 ‘여’로 조회
DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '2', '여')
→ ‘2’는 없어도 됨.
CASE
CASE
WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
ELSE 결과값3
END
'LECTURE > Oracle' 카테고리의 다른 글
05_SUBQUERY (0) | 2023.01.16 |
---|---|
04_ JOIN (0) | 2023.01.16 |
03_GROUP BY 와 HAVING (0) | 2023.01.14 |
02_1 함수 - 그룹함수, 문자 관련 함수, 숫자 처리 함수 (1) | 2023.01.14 |
01_SELECT 기본문법 및 연산자 (0) | 2023.01.13 |