변환함수
TO_CHAR(인자, 출력포맷) | 인자(날짜, 숫자)를 문자로 변환하는 함수 |
TO_DATE(인자, 포맷) | 문자 데이터를 날짜 데이터로 변환하는 함수 |
TO_NUMBER(인자, 포맷) | 문자 데이터를 숫자 데이터로 변환하는 함수와 |
국비다닐 때 정말 이 부분은 급하게 넘어간거 같다, 나는 비록 MS SQL을 주로 사용했지만, 위의 변환함수들 은근 자주 사용했다.
왜냐하면 SQL 테이블에 저장된 데이터의 대부분의 데이터타입이 문자열이었기 때문에 연산이 필요할때는 숫자로 변환해서 연산처리를 했었다. 특히나 가장 까다로운게 바로 날짜타입... 데이터 타입이 상당히 까다로웠다.
이번에 열심히 강좌를 들으며, 머릿속에 개념을 정리했다.
알클님 유튜브 강의는 강력추천 한다.
https://www.youtube.com/watch?v=t90j9GAdFUo&list=PL4C2AmBC9jOYAQrvie3y5c8GN01KGq5WR&index=16
TO_CHAR(날짜, 포맷)
CC | 세기 |
YYYY | 연도(4자리) |
YY | 연도(2자리) |
MM | 월(2자리) |
MON | 월(언어별 월 이름의 약자 - JAN/ 1월) |
MONTH | 월(언어별 월 이름 - January / 1월) |
DD | 일 (2자리) |
DDD | 1년 중 몇일(3자리) [1~366] |
DY | 요일(언어별 요일 이름의 약자) |
DAY | 요일(언어별 요일 이름) |
W | 1년 중 몇 번째 주[1~53] |
HH24 | 24시 기준 시간 |
HH | 12시 기준 시간 |
MI | 분 |
SS | 초 |
AM, PM | 오전, 오후 |
35. 테이블 EMPLOYEE의 FIRST_NAME과 HIRE_DATE를 검색하되 <예시>와 같이 날짜형식을 지정하는 SQL
SELECT
first_name AS "이름",
TO_CHAR(hire_date,'YYYY-MM-DD (DY) HH:MI:SS') AS "입사일자"
FROM EMPLOYEES;
36. 테이블 EMPLOYEE의 FIRST_NAME과 HIRE_DATE를 검색하되 <예시>와 같이 금액형식을 지정하는 SQL
SELECT
first_name AS "이름",
TO_CHAR(salary,'$999,999,999') AS "급여",
salary
FROM employees
37. 문자형으로 주어진 데이터를 날짜형으로 변환하는 SQL
예시) '20220712'
SELECT
TO_DATE('20220712','YYYYMMDD') AS "날짜1"
, TO_DATE('2022/07/12','YYYY/MM/DD') AS "날짜2"
, TO_DATE('2022-07-12','YYYY-MM-DD') AS "날짜3"
, TO_DATE('2022.07.12','YYYY.MM.DD') AS "날짜4"
FROM dual;
38. <예시> 와 같이 문자형으로 주어진 데이터를 숫자형 데이터로 변환하는 SQL
-- 예시 1,200,000
SELECT
'1,200,000' AS "문자",
TO_NUMBER('1,200,000','9,999,999') AS "숫자로 변환"
FROM dual;
날짜함수
SYSDATE | 현재 날짜와 시간을 DATE 타입의 데이터로 변환하는 함수 |
SYSTIMESTAMP | 현재 날짜와 시간을 TIMESTAMP 타입의 데이터로 변환하는 함수 |
ADD_MONTHS(날짜, 개월수) | 해당 날짜로부터 개월 수를 더한 날짜를 변환하는 함수 |
MONTHS_BETWEEN(날짜1, 날짜2) | 날짜1부터 날짜2 사이의 개월 수를 변환하는 함수 |
NEXT_DAY(날짜, 요일번호) | 지정한 날짜 이후에 나오는 요일번호에 해당하는 날짜를 변환하는 함수 |
요일 번호: 일요일(1) ~ 토요일(7) | |
LAST_DAY(날짜) | 지정한 날짜와 같은 달의 마지막 날짜를 반환하는 함수(월말) |
LAST_DAY(날짜) | 지정한 날짜와 같은 달의 마지막 날짜를 반환하는 함수(월말) |
TRUNC(날짜, 날짜형식) | 날짜형식 단위로 날짜 데이터를 절삭하여 반환하는 함수 |
39. <예시>와 같이 현재 날짜를 반환하는 SQL문을 작성하시오.
SELECT
sysdate-1 AS "어제",
sysdate AS "오늘",
sysdate+1 AS "내일"
FROM dual;
40. <예시>와 같이 입사일자와 오늘 날짜를 계산하여 근무달수와 근속연수를 구하는 SQL
SELECT
first_name AS "이름",
TO_CHAR(hire_date, 'YYYY.MM.DD') AS "입사일자",
TO_CHAR(sysdate,'YYYY.MM.DD') AS "오늘날짜",
TRUNC(MONTHS_BETWEEN(sysdate, hire_date)) || '개월' AS "근무일수",
TRUNC(MONTHS_BETWEEN(sysdate, hire_date) / 12) || '년' AS "근속년수"
FROM EMPLOYEES;
41.<예시>와 같이 오늘 날짜와 6개월 후의 날짜를 출력하는 SQL
오늘로부터 6개월 후의 날짜를 구하시오.
: 지정한 날짜로부터 해당 개월 수를 후의 날짜를 반환하는 함수
SELECT
sysdate AS "오늘",
ADD_MONTHS(sysdate,6) AS "6개월 후"
FROM dual;
42. <예시> 와 같이 오늘 날짜와 오늘 이후 돌아오는 토요일의 날짜를 출력하는 SQL문
SELECT
sysdate AS "오늘"
, NEXT_DAY(sysdate, 7) AS "다음 토요일"
FROM dual;
SELECT NEXT_DAY(sysdate, 2) AS "다음 월요일"
, NEXT_DAY(sysdate, 3) AS "다음 화요일"
, NEXT_DAY(sysdate, 4) AS "다음 수요일"
, NEXT_DAY(sysdate, 5) AS "다음 목요일"
, NEXT_DAY(sysdate, 6) AS "다음 금요일"
, NEXT_DAY(sysdate, 7) AS "다음 토요일"
, NEXT_DAY(sysdate, 1) AS "다음 일요일"
FROM dual;
43. 오늘 날짜와 해당 월의 월초, 월말 일자를 구하시오.
월초: TRUNC(날짜, 'MM')
월말: LAST_DAY(날짜)
SELECT
sysdate AS "오늘날짜"
, TRUNC(sysdate, 'MM') AS "월초"
, LAST_DAY(sysdate) AS "월말"
FROM dual;
*블로그의 내용은 알클님 강의를 기반으로 작성되었습니다!
'SQL공부' 카테고리의 다른 글
ORACLE 오라클 SQL9 - CASE, 그룹함수 (0) | 2025.01.14 |
---|---|
ORACLE 오라클 SQL8 - NULL (1) | 2025.01.14 |
ORACLE 오라클 SQL 5 - 숫자함수 (0) | 2025.01.14 |
ORACLE 오라클 SQL 4 - SELECT 조회(기초) (0) | 2025.01.13 |
ORACLE 오라클 SQL 2 - HR 계정 생성하기 (0) | 2025.01.13 |