반응형
날짜 타입
SQL Developer에서 출력되는 날짜 타입의 형식을 변경할 수 있다.
기본 설정의 경우 RR/MM/DD의 형태로 되어 있다.
년도인 YYYY을 RR로 사용할 경우 50~90년은 1900년대로, 00~49년은 2000년대로 변환되어 출력된다.
설정 변경은 도구 > 환경설정 > 데이터베이스 > NLS 를 클릭하여 날짜 형식을 변경하면 된다.
날짜 타입을 문자 타입으로 변환
-- to_char => 날짜 타입을 문자타입으로 변환
select to_char(날짜 타입, 문자타입) from 테이블;
select sysdate from dual;
select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') 날짜 from dual;
select to_char(sysdate, 'YYYYMMDD HH24:MI:SS') 날짜 from dual;
문자 타입을 날짜 타입으로 변환
-- to_date => 문자 타입을 날짜 타입으로 변환
select to_date(문자 타입, 날짜 타입) from dual;
select to_date('19880112', 'YYYYMMDD') from dual;
날짜 계산 함수
1. 월 더하기
add_months(date, integer) : date에 integer만큼의 월을 더한 날짜를 리턴
2. 현재 월의 마지막 일자
last_date(date) : 현재 월의 마지막 일자를 리턴
3. 다음주 특정 요일의 날짜
next_day(date, char) : date의 다음 주 char(요일)의 날짜를 리턴
4. 날짜 사이의 개월 수
months_between(date1, date2) : date1과 date2 사이의 개월 수를 리턴
- 응용
-- add_months(date, integer) : date에 integer만큼의 월을 더한 날짜를 리턴
-- last_date(date) : 현재 월의 마지막 일자를 리턴
-- next_day(date, char) : date의 다음 주 char(요일)의 날짜를 리턴
-- months_between(date1, date2) : date1과 date2 사이의 개월 수를 리턴
select add_months(sysdate, 6) 육개월후,
last_day(sysdate) 금월마지막일,
next_day(sysdate, '일요일') 담주일요일,
round(months_between(sysdate, sysdate-100)) 삼개월, -- 오늘 날짜 빼기 100일 => 삼개월 차이 남
round(months_between(sysdate, '2023-10-25')) 이개월
from dual;
-- round : 반올림
자르기
select trunc(sysdate, 자를 기준) from 테이블;
-- trunc : 소수점 자르기
select sysdate - to_date('19880112', 'YYYYMMDD') from dual;
select trunc(sysdate) - to_date('19880112', 'YYYYMMDD') from dual;
- 응용
-- 오늘날짜 20231221 기준 절삭시
select trunc(sysdate, 'Y') from dual;
-- 오늘날짜 20231221 기준 절삭시
select trunc(sysdate, 'MM') from dual;
-- 오늘날짜 20231221 기준 절삭시
select trunc(sysdate, 'DD') from dual;
시, 분, 초 계산하기
1. 시간 차이로 계산
select round((to_date('16:30', 'HH24:MI') - to_date('15:10', 'HH24:MI')) * 24, 1) 시간으로차이계산
from dual;
2. 분 차이로 계산
select round((to_date('16:30', 'HH24:MI') - to_date('15:10', 'HH24:MI'))*24*60, 1) 분으로시간차이계산
from dual;
3. 초 차이로 계산
select round((to_date('16:30', 'HH24:MI') - to_date('15:10', 'HH24:MI'))*24*60*60,1) 초로시간차이계산
from dual;
응용
아래의 내용은 해당 날짜에 따라 값이 다르게 나온다.
- 요일표시, 년월일 절삭하기
-- 결과 : 연도
select to_char(sysdate, 'year') from dual;
-- 결과 : 목요일
select to_char(sysdate, 'day') from dual;
-- 결과 : 목
select to_char(sysdate, 'dy') from dual;
-- 결과 : 3 (1:일, 2:월, 3:화, 4:수, 5:목, 6:금, 7:토)
select to_char(sysdate, 'd')from dual;
AM, PM, 세기 표시
-- AM, PM, 세기 표시
-- nls_date_language = american : AM, PM
-- nls_date_language = korean : 오전, 오후
select to_char(날짜, 'AM', 'nls_date_language=나라') from dual;
-- AM, PM, 세기 표시
-- nls_date_language = american : AM, PM
-- nls_date_language = korean : 오전, 오후
select to_char(sysdate, 'AM', 'nls_date_language=american') as american,
to_char(sysdate, 'AM', 'nls_date_language=korean') as korean from dual;
select to_char(to_date('20230322181011', 'YYYYMMDDHH24MISS'), 'YYMMDD HH:MM:SS AM') 오전오후
from dual;
select to_char(sysdate, 'AD YYYY, CC"세기"')
from dual;
반응형
'데이터베이스' 카테고리의 다른 글
[Database] 13장 함수 모음2 (0) | 2023.12.26 |
---|---|
[Database] 12장 함수 모음1 (0) | 2023.12.22 |
[Database] 10장 SQL 연습문제3 (0) | 2023.12.19 |
[Database] 9장 SQL 연습문제2 (0) | 2023.12.19 |
[Database] 8장 SQL 연습문제1 (0) | 2023.12.18 |