날짜 처리 함수

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

+ Recent posts