본문 바로가기
✨ DBMS/Oracle

[Oracle / SQL] 더미테이블(DUAL)과 유용한 숫자 함수 예제 2

by 환풍 2023. 2. 21.
728x90
반응형

숫자 관련 함수

 

반올림

1
2
3
4
5
6
SELECT 123.456
    , ROUND(123.456)
    , ROUND(123.456 , 1)
    , ROUND(123.456,2)
FROM DUAL;
 
cs

( ) 괄호 두번째 , 숫자는 소수점 몇번째 까지 나타내라~ 라는 의미이다.


올림, 버림

1
2
3
4
SELECT 123.456
    , CEIL(123.456)
    , FLOOR(123.456)
FROM DUAL;
cs

CEIL 은 올림, FLOOR은 내림 함수이다.


나머지구하기

1
SELECT MOD(104FROM DUAL;
cs


 형 변환 함수     ****(중요)
 숫자 <--> 문자 <--> 날짜

 

1
2
3
4
SELECT *
FROM EMP
WHERE HIREDATE = '07/03/01';
--WHERE HIREDATE = '20070301';  위 WHERE문과 동일.
cs

조건에서 날짜를 비교할 때는 숫자는 안되고 문자는 가능하다.

쉬운 예로, 위와 같이 날짜 타입으로 형 변환 후 비교하는게 가장 좋은 방법이다.

 

숫자를 문자로, 문자를 숫자로 변환

1
2
3
4
5
SELECT 1001
    , TO_CHAR(1001)
    , '1001'
    , TO_NUMBER('1001')
FROM DUAL;
cs

왼쪽 정렬은 문자,

오른쪽 정렬은 숫자


문자를 날짜로, 날짜를 문자로 변환

1. 날짜를 문자로 변환

1
2
3
4
5
6
7
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
    , TO_CHAR(SYSDATE, 'YYYY')
    , TO_CHAR(SYSDATE, 'HH24:MI:SS')
    , TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
    , TO_CHAR(SYSDATE, 'YYYY/MM/DD')
    , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
cs


EX)  오늘 날짜를 '2023년 2월 21일'로 출력

1
2
SELECT TO_CHAR(SYSDATE, 'YYYY'||'년 ' || TO_CHAR(SYSDATE, 'MM'||'월 '|| TO_CHAR(SYSDATE, 'DD'||'일' 
FROM DUAL;
cs

좀 많이 번잡하니 AS 별칭을 주자.

1
2
SELECT TO_CHAR(SYSDATE, 'YYYY'||'년 ' || TO_CHAR(SYSDATE, 'MM'||'월 '|| TO_CHAR(SYSDATE, 'DD'||'일'  AS 오늘날짜
FROM DUAL;
cs

2.  문자를 날짜로 변환

1
2
SELECT TO_DATE('20230221')
FROM DUAL;
cs

 


 

1
2
3
4
5
6
7
8
9
CREATE TABLE DATE_TEST (
    NUM NUMBER PRIMARY KEY
    , MY_DATE DATE
);
 
INSERT INTO DATE_TEST VALUES(1, SYSDATE);
INSERT INTO DATE_TEST VALUES(2'20230221');
 
COMMIT;
cs

 

1
2
3
4
SELECT NUM, MY_DATE
    , TO_CHAR(MY_DATE, 'YYYY-MM-DD')
    , TO_CHAR(MY_DATE, 'YYYY-MM-DD HH24:MI:SS')
FROM DATE_TEST;
cs

이와 같이 에러가 난다.

 

형변환 필수!

1
2
3
4
5
-- 2005년 1월 1일 이후로 입사한 사원의 모든 정보 조회
SELECT * FROM EMP WHERE HIREDATE >= '20050101';
SELECT * FROM EMP WHERE HIREDATE >= TO_DATE('20050101');
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE, 'YYYYMMDDHH24MISS'>= '20050101101010';
-- 둘다 문자로 바꿔주거나 둘다 날짜로 바꿔주자.
cs

이처럼 둘다 문자로 바꿔주거나 둘다 날짜로 바꿔주자.

728x90
반응형

댓글