[ 날짜관련 함수 및 기능 ]
[ sysdate , systimestamp ]
sysdate 는 가상컬럼으로 현재 날짜의 정보를 담고 있다.
1. 기본 출력
(1) 오늘의 날짝를 출력한다. ( 기본은 날짜만 출력하고 시분초는 숨김 속성으로 되어있음)
SELECT sysdate FROM dual;
(2) 오늘의 날짜 및 시분초등을 출력한다.
SELECT systimestamp FROM dual;
2. 날짜 단위 증가/감소
- 일(날짜)단위 증가와 감소는 +,- 연산기호를 사용한다.
(1) 35일 후의 날짜 출력
- select sysdate, sysdate+35 from dual;
(2) 20일 전의 날짜 출력
- select sysdate, sysdate-20 from dual;
3. add_month() 함수
- 월단위 증가/감소
- SELECT add_months(sysdate,2) from dual;
4. months_between() 함수
- 월 단위의 차이를 반환한다.
- 날짜를 똑 같이 세팅해야 정수의 결과를 얻을 수 있고, 그렇지 않으면 세분화가 되므로 round를 사용하여 소숫점의 결과를 보게 된다.
(1) 사원들의 입사일과 오늘과의 달 수 차이를 출력한다.
* months_between(큰달,작은달)
- select months_between('2023-05-22','2023-04-22') FROM dual; -- 1 개월 차이
- select round( months_between('2023-05-15','2023-04-30') , 2 ) FROM dual; -- 0.52 차이
5. last_day() 함수
- 마지막 날짜를 반환한다.
- SELECT last_day(sysdate) FROM dual;
- SELECT last_day('2021-02-01') FROM dual;
6. TO_CHAR() 함수
의미) 날짜 타입의 값을 지정된 포멧으로 변형하는 함수
형식) to_char(날짜,출력폼)
(1) 년월일 시분초
select
TO_CHAR( sysdate, 'yyyy-mm-dd am hh:mi:ss' ) as mydate
from dual;
(2) 년도만 출력
select TO_CHAR( sysdate, 'yyyy' ) from dual;
(2) 오늘의 년월일을 폼을 갖추어 출력한다.
select TO_CHAR(sysdate, 'yyyy-mm-dd') from dual;
(3) 오류발생 error -- 문자 타입의 값이 오면 오류발생
select TO_CHAR( '2021', 'yyyy' ) from dual;
(4) 오늘의 날짜와 요일을 출력한다.
select
TO_CHAR(sysdate, 'yyyy-mm-dd day') as mydate
from dual;
(출력)
2021-07-09 금요일
** 요일
SELECT TO_CHAR(SYSDATE, 'D') -- 5 : 1(일)~7(토)
, TO_CHAR(SYSDATE, 'DY') -- 목
, TO_CHAR(SYSDATE, 'DAY') -- 목요일
FROM dual
7. TO_DATE() 함수
※ 문자타입의 날짜 및 시간 값을 날짜타입으로 변형하는 함수
(1) 기본
SELECT to_date('2021-07-10 13:20:30','yyyy-mm-dd hh24:mi:ss') as mdate FROM dual;
(출력) MYDATE
21/07/10
* 날짜 타입으로 변형 시켰으나 기본 출력은 년/월/일 이므로 시간은 감춰져 있다.
(2) 날짜문자열과 포멧이 서로 맞지 않는 경우 1
SELECT
to_date('2021-07-10','yyyy-mm-dd hh24:mi:ss') as mdate
FROM dual;
(출력) MYDATE
21/07/10
* 기준이 되는 문자열의 값보다 포멧 값이 많은 경우 ( 시간부분은 00:00:00 처리됨 )
(3) 날짜문자열과 포멧이 서로 맞지 않는 경우 2
SELECT
TO_DATE('2021-07-10 13:20:30','yyyy-mm-dd') AS mydate
FROM DUAL;
(출력) 오류발생 - error
* 기준이 되는 문자열의 값보다 포멧 값이 적은 경우 오류를 발생시킨다.
(4) 날짜문자열의 - 부호를 없앰
SELECT
TO_DATE('20210710','yyyy-mm-dd') AS mydate※
FROM DUAL;
(출력) MYDATE
21/07/10
(5) 년도만 세팅하는 경우 - 월/일은 당일을 적용하여 반영됨
SELECT
TO_DATE('1998','yyyy') AS mydate
FROM DUAL;
(출력) MYDATE
21/07/10
8. TO_CHAR() 함수의 특별 기능
- 3자리 콤마 표현 및 원표시 달러표시 ,,
- 숫자 9 가 올수도 있고 0 이 올수도 있음 ,,
- 9는 0이 있는 경우 표현을 안하고 0는 0이 올때 표현함.
(예제1)
SELECT
TO_CHAR(123467, 'FM999,999') as r1, --> 123,467
TO_CHAR(123467890, 'FML999,999,999') as r2 --> ₩123,467,890
TO_CHAR(123467, 'FM$999,999') as r3 --> $123,467
FROM dual;
(예제2)
select TO_CHAR(1001.00, 'FM9,999.00') from dual; --> 1,001.00
select TO_CHAR(1001.00, 'FM9,999.99') from dual; --> 1,001.
select TO_CHAR(001.00, 'FM0,000.00') from dual; --> 0,001.00
select TO_CHAR(001.00, 'FM9,999.00') from dual; --> 1.00
9. TO_NUMBER() 함수
- 숫자처럼 보이는 문자를 숫자로 바꾸어주는 함수
- 일반적으로 문자 타입의 숫자들도 연산이 가능하므로 크게 실효성을 없는것 처럼 보이나
- 버전에 따라 문자컬럼안의 숫자들은 연산이 안되는 경우도 있으니 일반적으로 적용해서 사용한다.
SELECT TO_NUMBER('123') FROM dual;
SELECT '50' + '30' FROM dual; -- 80