본문 바로가기

Oracle/Oracle SQL

Database SQL_Sigle-Row Runction_숫자&날짜함수

Step 2. Single-Row Function! 

- Sub : 숫자함수 & 날짜함수

 

 하루 건너뛰었네요.. 이래저래 바빠서라는 변명 @_@;; 그래도 열심히 해야죵ㅎㅎ

이번에 올릴 포스팅은 숫자 함수, 날짜 함수입니다. 그렇게 어려운건 없습니다 ㅎ

일반 상식들의 집합체라고 보면될까요?ㅎ 문자함수에 비해서 확실히 쉬운 아이들로 구성이 되어 있습니다.

 

먼저 숫자함수부터 표로 만나보죵 ㅎ

 이 름

 의 미 

 사 용 예

 ROUND

 주어진 숫자 반올림

 ROUND(12.345, 2) -> 12.35

 TRUNC

 주어진 숫자 버림

 TRUNC(12.345, 2) -> 12.34

 MOD

 주어진 숫자 나누기 한 후 나머지 값

 MOD(12,10) -> 2

 CEIL

 주어진 숫자와 가장 근접한 큰 정수

 CEIL(12.345) -> 13

 FLOOR

 주어진 숫자와 가장 근접한 작은 정수

 FLOOR(12.345) -> 12

 POWER

 주어진 숫자 1의 숫자 2 승을 출력

 POWER(3, 2) -> 9

 

요로코롬 대표적인 6개입니다. 뜻 자체가 어려운건 없죠?ㅎ 그래서 문자함수를 하다가 숫자함수하면 너무 쉽네~ 이럴수도 ㅎ

하지만 함수 하나하나가 자신의 지식이 된다는게 중요하죠 ㅎ 직접 Linux에서 돌린걸 보도록 하죠 ㅎ

 

ROUND부터 보도록 하겠습니다. 주어진 숫자의 반올림입니다. 여러경우에서 많이 쓰이겠죠 ㅎ 회계에서도 많이 쓰일거구요 ㅎ

하지만 소수점이 아닌 정수의 반올림은? (-) 마이너스로 해주시면 됩니다. 한번 볼까욤 ㅎ

 

 

이렇게 ROUND의 여러모습들을 보는데요. 그냥 아무런 조건없이 ROUND 함수내에 숫자만 있다면 그냥 정수만 나옵니다.

지금은 소수점 첫번째가 3이라서 12가 나왔는데요. 5이상이 될경우에는 13이 나오는 자동 반올림입니다.

-1도 보시면 첫번째 자리에서 반올림이 됐기 때문에 10이 나옵니다. 어렵지 않죵ㅎ

 

그다음 TRUNC는 주어진 숫자를 버림!! 버림!!! 초등학교때 배운것 같은 기억이..ㅎ

 

 

이렇게 보면 두번째만 다르죠? 12.34로 소수점 아래 세번째 자리인 5를 그냥 버리니까요.

하지만 첫번째의 경우도 소수점 첫번째자리가 5이상이어도 버리는것이 바로 TRUNC 입니다.

TRUNC의 숫자적인 함수도 있지만 날짜적인 함수도 있습니다. 물론 ROUND도 포함인데요.

 

 

이런식으로 TRUNC를 이용하여 오늘처음시간, 연초, 주초, 월초 등을 출력 할 수 있고

 

 

ROUND를 이용하면 또 값이 다르게 출력이 되는 것을 볼 수 있습니다.

지금 현재 제가 이용한 시간은 2013년 8월 28일 13시 50분입니다. 2013년의 후반기이고 오후이죠.

ROUND는 반올림하는 것이라고 말씀을 드렸습니다. 그렇기 때문에 DAY에 내일이 나오는 것이고 YEAR에는 내년 초

WEEK START에는 요번주 월요일, WEEK END에는 이번주 마지막인 일요일이 나오게 되는겁니다 ㅎ

오라클 메뉴얼을 보면서 이 글을 적고 있는데요. 이외에도 Hour는 HH, HH12, HH24로 표기 가능해서 함수를 쓸 수 있구요

Minute는 MI라는 조건으로 반올림이 가능합니다. 분기를 뜻하는 Quarter는 Q를 이용해서 가능합니다.

오라클은 참 편리한 것들을 많이 만들어 놓은 것 같습니다. 똑똑한 사람들..ㅎㅎ

 

이렇게 ROUND와 TRUNC의 설명이 끝났는데요. 이번에는 MOD를 설명해야겠죠 ㅎ

MOD는 나누기 후 나머지값 출력입니다. 한번 보죵 ㅎ

 

간단하게 12를 10으로 나누면 나머지는? 2이죠 ㅎ 그렇기 때문에 MOD에는 2가 나옵니다 ㅎ

 

다음에 봐야할 것은 CEILFLOOR죠 ㅎ 이것도 세트로 보시면 됩니당

CEIL은 실수와 가장 가깝고 큰 정수, FLOOR는 가장 가깝고 작은 정수가 출력이 됩니다.

 

 

이렇게 쉬운역할을 해주는 아이들이 CEIL과 FLOOR입니다. 천장과 바닥이죠.

 

오늘 숫자함수의 마지막은 POWER함수입니다. 승수를 올려서 숫자를 키우는 역할!

 

 

쉽게 보기위해서 2의 승수를 하나하나 올려봤는데 이해가 좀 되시나욤ㅎㅎ 이렇게 쉬운 숫자 함수가 끝났습니다.

뭐가 쉽냐고 따지질수도.. 있지만 문자함수보단 쉽다고 생각합니다..ㅎㅎㅎ

 

이제 날짜함수를 살펴보도록 하겠습니다.

 함 수 명

 의 미

 결 과

 SYSDATE

 시스템의 현재 날짜와 시간

 날짜

 MONTHS_BETWEEN

 두 날짜 사이의 개월 수

 숫자

 ADD_MONTHS

 주어진 날짜에 개월을 더함

 날짜

 NEXT_DAY

 주어진 날짜를 기준으로 돌아오는 날짜

 날짜

 LAST_DAY

 주어진 날짜가 속한 달의 마지막 날짜

 날짜

 ROUND

 주어진 날짜를 반올림

 날짜

 TRUNC

 주어진 날짜를 버림

 날짜

 

이전에 봤던 ROUND와 TRUNC는 설명하지 않도록 하겠습니다. 앞에꺼에서 봐주세요 ㅎ

먼저 설명 드릴것이 있는데요. 날짜 - 날짜는? 결과가 숫자입니다. 하지만 날짜 + 숫자날짜 - 숫자날짜로 인식이 된다는 것!

날짜함수는 택배 배송의 경우나 입사일 관리 근속 경력의 수 같은 것들을 계산하기에 좋고 많이 쓰이기도 합니다. 또 하나하나 보죠 ㅎ

 

기본적으로 쓰이는 SYSDATE부터 봅시다. 이전에 TRUNC와 ROUND하면서 봤었습니다.

 

 

별다르게 어려운건 없죠?ㅎ 하지만 이건 미국식 표기 방법이고 우리눈엔 익숙치 않을 뿐더러 시간이 안나와있으니 고쳐보도록 하죠 ㅎ

 

 

ALTER 명령어를 써서 가능한데요. alter session set NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS';

하면되는데 마음대로 형식을 바꾸고 싶다고 하면 바꾸셔도 상관 없는 겁니다. FORMAT이기 때문에 사용자 마음대로~ㅎ

다시한번 SYSDATE를 보았더니 원하던대로 변화가 된것을 알 수 있습니다 ㅎ

 

다음으로 MONTHS_BETWEEN을 보겠습니다. 개월의 차이를 보는 함수인데 결함이 좀 있습니다.

2월의 경우 28일인 달이 있고 29일인 달인 윤달이 있습니다. 오라클에서 이것까지는 계산이 안되어서 결함이 있습니다.

그래서 매우 주의해서 써야하는 것이 바로 MONTHS_BETWEEN 함수이고 월초끼리나 월 말끼리 계산을 하면 정수로 나오게 됩니다.

 

 

제가 지금 현재 글을 쓰고 있는 날짜는 8월 28일입니다. 그렇기 때문에 다음달 9월 28일과 비교를 해봤습니다. 그랬더니 오늘을 먼저 놓으면 마이너스가 생기고 다음달을 먼저 놓으면 정수 1이 출력되는 것을 알 수 있습니다. 이처럼 잘 써야 하는 것이 MONTHS_BETWEEN함수!

 

날짜 함수 벌써 두개나 봤네요 ㅎ 앞으로 세개 더! 다 어렵지 않아서 슉슉 지나갑니다 ㅎ

ADD_MONTHS는 말그대로 달을 추가하는 겁니다.

 

 

이렇게 ADD_MONTHS(해당 일자, 숫자)를 하면 해당 숫자만큼을 해당일자에 더합니다. 오늘의 SYSDATE에 2를 더하니 2013년 10월이 나오는 것을 볼 수 있습니다.

 

이제 앞으로 두개! NEXT_DAYLAST_DAY 입니다. 돌아오는 가장 최근 요일과 속한달 마지막 날을 출력하는 거죠 ㅎ 봅시당 ㅎ

 

 

NEXT_DAY는 어느 요일인지를 선택해야 합니다. 저는 돌아오는 월요일을 선택했기 때문에 9월 2일이 출력!

LAST_DAY는 요번달의 마지막인 8월 31일이 출력 된 것을 알 수 있습니다. 그와중에도 시간은 똑같음도 알 수 있구요 ㅎ

 

이렇게 숫자함수와 날짜함수를 모두 보았습니다. 하하.. 둘다 함쳐도 문자 함수 정리보단 적네요..ㅎ

이제 앞으로 할 것은 형변환을 내일 다루도록 하겠습니다. SQL은 DBMS에 따라 형식이 조금씩 다릅니다. 그중에서도 전 ORACLE이기 때문에 ORACLE위주로 형변환을 할거구요 ㅎ 다음 포스팅에선 형변환을!ㅎ