Data Base/Oracle SQL

23.10.10. Oracle SQL 형변환 함수

잇꼬 2023. 10. 10. 17:34
728x90
반응형
SMALL

■ 형변환 함수
to_char : date(날짜형)을 char(문자형)으로 변환하는 함수
to_char(날짜, '날짜모델요소')

SELECT * FROM nls_session_parameters;


SELECT
    sysdate ,
    to_char(sysdate, 'yyyymmdd'),
    to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss.sssss') ,
    to_char(sysdate + 100, 'yyyy-mm-dd hh24:mi:ss.sssss') ,
    to_char(sysdate - 100, 'yyyy-mm-dd hh24:mi:ss.sssss')
FROM dual;

SELECT
    sysdate ,
    to_char(sysdate, 'yyyy yy rr rrrr year'), 
    to_char(sysdate, 'yyyy')||'년' ,
    to_char(sysdate, 'yyyy"년"') -- 주의! 문자열과 함께 나열할 때에는 큰따옴표를 써야 한다.
FROM dual;

SELECT 
    to_char(add_months(sysdate,-1), 'month mon mm fmmm') "월" -- fm : 선행되는 제로를 제거하는 옵션
FROM dual;

-- 분석에서 자주 사용된다. 
SELECT 
    to_char(sysdate, 'ddd dd d') "일" , -- ddd: 365일(기준), dd: 한달기준, d: 일요일기준 1 토요일 7
    to_char(sysdate, 'day dy') "요일" ,
    to_char(sysdate, 'ww w') "주" ,
    to_char(sysdate, 'q"분기"') "분기별" ,
    to_char(sysdate, 'dd ddth ddsp ddthsp') -- th:서수/ sp:스펠링
FROM dual;

SELECT 
    to_char(sysdate, 'hh am pm'),
    to_char(sysdate, 'hh hh12 hh24 am pm')
FROM dual;

[문제1] 사원들의 emplyoee_id, hire_date, 입사요일을 출력해주세요. 단, 요일을 기준으로 오름차순 정렬해주세요.

SELECT employee_id, hire_date, to_char(hire_date, 'day') "입사요일"
FROM hr.employees
ORDER BY to_char(hire_date, 'd') asc; -- 요일 기준으로 정렬/ '일요일기준'


[문제 1-1] 월요일을 기준으로 오름차순 정렬해주세요.

SELECT employee_id, hire_date, to_char(hire_date, 'day') "입사요일"
FROM hr.employees
ORDER BY to_char(hire_date-1, 'd') asc;


[문제2] 사원들 중에 일요일에 입사한 사원들의 정보를 출력하세요.

SELECT *
FROM hr.employees
WHERE to_char(hire_date, 'day') = '일요일';

SELECT *
FROM hr.employees
WHERE to_char(hire_date, 'dy') = '일';

SELECT *
FROM hr.employees
WHERE to_char(hire_date, 'd') = '1';


[문제3] 오늘 날짜를 "2023년 10월 10일 화요일" 출력해주세요.

SELECT to_char(sysdate, 'yyyy"년" mm"월" dd"일" day') "오늘 날짜"
FROM dual;

 

- 객체지향 프로그램의 장점 중 
오버로딩(overloading) : 함수이름만 같을 뿐 다른 함수

to_char : number(숫자형)을 char(문자형)으로 변환하는 함수

to_char(숫자, '숫자모델형식') to_char(날짜, '날짜모델형식') 
date(날짜형) → (반환) →  char(문자형)  number(숫자형) → (반환) → char(문자형)
SELECT
    salary,
    to_char(salary, '$999,999'),
    to_char(salary, '$000,999.00') , -- '$000,999.00' : 0으로 표시하면 숫자가 없다면 0으로 출력
    to_char(salary, 'l000,999.00') "지역통화부호" -- l(L의 소문자) 요소는 지역통화부호를 출력
FROM hr.employees;

ALTER SESSION SET NLS_LANGUAGE = american;
ALTER SESSION SET NLS_TERRITORY = america;

ALTER SESSION SET NLS_LANGUAGE = japanese;
ALTER SESSION SET NLS_TERRITORY = japan;

ALTER SESSION SET NLS_LANGUAGE = 'simplified chinese';
ALTER SESSION SET NLS_TERRITORY = china;

ALTER SESSION SET NLS_LANGUAGE = french;
ALTER SESSION SET NLS_TERRITORY = france;

ALTER SESSION SET NLS_LANGUAGE = korean;
ALTER SESSION SET NLS_TERRITORY = korea;

select * from nls_session_parameters;

SELECT 
    to_char(hire_date, 'month mon day dy') hiredate,
    to_char(salary, 'l999g999d00') salary -- g:천단위/ d:소수점 → 나라마다 표기법이 다르기때문에
FROM hr.employees ;

SELECT 
    to_char(-1000, '999') , -- 자릿수가 잘못 표현했을 경우 '###'으로 나옴
    to_char(-1000, '9999') ,
    to_char(-1000, '9999pr') ,-- pr: 음수일 경우 <> 표현
    to_char(-1000, '9999mi') ,-- mi: 음수 부호를 뒤에 표현
    to_char(1000, 's9999') -- s: 부호 표현 
FROM dual;

tip) to_char(금액 컬럼명, 'l999g999d00') : 나라별 표기법이 천 단위 표기법이 달라서 알고 가는 것이 좋다!

 

- to_number : 문자형(숫자문자일 경우)을 숫자형으로 변환하는 함수
to_number(문자(숫자), '숫자모델요소(생략)') 

SELECT 1+'2' --암시적으로 형변환이 된다.
FROM dual;


SELECT 1+to_number('2', '9') -- '9'는 보편적으로 생략한다.
FROM dual;


to_date : 문자형(날짜)을 날짜형으로 변환하는 함수
to_date(문자(날짜), '날짜모델요소')

SELECT *
FROM hr.employees
WHERE hire_date BETWEEN '06/01/01' AND '06/12/31' ;

ALTER SESSION SET NLS_LANGUAGE = american;
ALTER SESSION SET NLS_TERRITORY = america;

SELECT *
FROM hr.employees
WHERE hire_date BETWEEN '06/01/01' AND '06/12/31' ; -- 실행이 되지 않음. american 지역에서는 korea 날짜형식이 맞지 않기 때문이다.

SELECT * FROM nls_session_parameters;

SELECT *
FROM hr.employees
WHERE hire_date BETWEEN to_date('2006/01/01', 'yyyy/mm/dd') AND to_date('2006/12/31', 'yyyy/mm/dd');

 

★ 형변환 함수

to_char(날짜, '날짜모델형식') date(날짜형)을 char(문자형)으로 변환하는 함수
to_chat(숫자, '숫자모델형식') number(숫자형)을 char(문자형)으로 변환하는 함수
to_number(문자(숫자), '숫자모델요소(생략가능)') 문자형(숫자문자일 경우)을 숫자형으로 변환하는 함수
to_date(문자(날짜), '날짜모델요소') 문자형(날짜)을 날짜형으로 변환하는 함수
728x90
반응형
LIST