Search

반응형

'Software/데이터베이스(SQL)'에 해당되는 글 33건

  1. 2020.08.25 [HOW]데이터베이스 SQL 날짜형 내장함수 사용법. -ORACLE/오라클
  2. 2020.08.19 [데이터베이스]SQL 내장함수 숫자형 쉽게 활용하기 편. (TRUNC, ROUND, CEIL 등)
반응형

안녕하세요. 신기한 연구소입니다.

폭발적인 더위에 코로나까지 마스크를 사용하면서 출퇴근부터 근무하기까지 정말 많이 힘든 시기입니다.

이번 포스팅은 SQL 내장 함수 중 날짜형은 어떻게 사용하는지 사용법에 대해 살펴보겠습니다.

 

날짜형은 DATE 타입을 사용합니다.

숫자도 아니고 문자도 아닌 순수한 날짜형 타입입니다.

테이블을 DATE 타입으로 정의하고 현재 날짜를 SYSDATE로 입력하면 날짜형 타입으로 데이터가 들어갑니다.

 

UPDATE TABLE_NAME

SET MODIFY_DATE = SYSDATE

WHERE ID = '123';

 

ID가 '123'인 행의 MODIFY_DATE는 타입이 DATE() 형이고 SYSDATE를 설정하면 현재 서버의 시간을 그대로 입력합니다.

하지만 우리가 화면에 년, 월, 일의 문자형이나 숫자형으로 변환해서 사용할 수 있습니다.

하지만 DATE 타입을 그대로 사용할 수는 없고 변환하는 내장 함수를 사용하게 됩니다.

보통은 TO_CHAR() 함수를 자주 사용합니다.

 

TO_CHAR(날짜형 데이터, 포맷)

 

이 형식으로 사용하는데 예제로 확인해봅니다.

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;

>20200825

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;

>2020-08-25

SELECT TO_CHAR(SYSDATE, 'YYYY', 'MON', 'DAY') FROM DUAL.;

>2020년, 8월, 수요일

 

날짜형 데이터로 오늘 날짜를 가져오는 SYSDATE를 사용했습니다.

컬럼에 DATE()이 있으면 해당 컬럼명을 사용해도 됩니다.

포맷으로 연도는 YYYY, 월은 MM., 날짜는 DD를 사용했으며

시간까지 표현하고 싶다면 HH24MISS를 사용하면 됩니다.

또 하나 유용한 함수가 있는데요.

바로 EXTRACT('YEAR' | 'MONTH' | 'DAY' FROM 날짜 타입 데이터) 인데요.

년, 월, 일을 편리하게 변환할 수 있는 내장 함수입니다.

 

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;

SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;

SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;

 

날짜형 데이터도 연산이 가능합니다.

날짜형 데이터에 +1을 하면 하루가 더해집니다. 즉 더하는 숫자만큼 날짜가 더해지고 빼면 날짜가 빠집니다.

또한 오늘 날짜에서 과거 어느 날짜를 빼면 그 차이만큼의 날수를 구할 수 있습니다.

 

예를 들어서 오늘 접속한 사용자는 내일 날짜부터 예약이 가능하다고 한다면

 

SELECT SYADATE + 1 FROM DAUL;

>20200826  (오늘이 25일이라고 한다면)

 

이렇게 사용할 수 있게 됩니다.

보통 이 정도면 개발 중 SQL 작성 시 날짜에 대한 사용함에 불편함은 없을 겁니다.

이번 포스팅은 간단하게 내장 함수중 날짜형 사용법에 대해 살펴봤습니다.

잘못된 정보나 수정이 필요한 부분은 댓글 주세요.

반응형
반응형

안녕하세요. 신기한 연구소입니다.

SQL을 짜다 보면 내장 함수의 필요성을 절실히 느끼는데요.

이번에는 숫자와 관련된 내장 함수를 알아보겠습니다.

 

숫자형 내장함수는 유용하게 많이 사용되므로 외우지 말고 신기한 연구소에 들러주세요. ㅎㅎ

 

ABS(숫자) 

-- 양수, 음수 관계없이 절댓값을 보여 줌.

은행의 입출금 내역은 그 양이 엄청 많습니다.

물론 한 고객의 하루 데이터는 거의 없거나 한 두건이겠지만

모든 고객의 하루 데이터는 엄청 많을겁니다.

그 경우 잘못 입금 또는 출금에 의해 마이너스로 처리되는 경우를 찾아야 한다면

기본 정렬을 하면 마이너스 부분이 앞이나 뒤로 밀리는데

이런 경우 금액을 ABS로 묶어주면 절댓값이 나와 그 거래를 찾기 쉬워집니다.

SELECT ABS(AMT)

  FROM ACCOUNT_INOUT

WHERE INOUT_DT = '20200819'

ORDER BY AMT;

 

MOD(숫자1, 숫자2)

-- 숫자1 나누기 숫자2 = 몫 + 나머지에서 나머지만 구하는 함수입니다.

짝수나 홀수를 구분하기 위해 사용할 수도 있습니다.

SELECT MOD(AMT, 2)

  FROM ACCOUNT;

AMT를 2로 나눠서 나머지가 0이면 짝수, 1이면 홀수가 되겠네요.

 

ROUNT(숫자, 자릿수) 

-- 소수점 반올림하는데 자릿수 + 1의 자리에서 반올림합니다.

-- 자릿수를 생략하면 기본 0이 됩니다.

SELECT ROUND(4.12345, 3) FROM DUAL;

>4.123

소수점 3자리를 표현하려면 +1을 해서 4번째 자리에서 반올림하면 됩니다.

 

CEIL(숫자)

-- 입력된 숫자보다 크거나 같은 최소의 정수를 보여줍니다.

결과는 정수입니다.

SELECT CEIL(22.123) FROM DUAL;

>23

입력값이 22.123이고 22보다 큰 수이기에 22의 다음인 23을 보여줍니다.

 

FLOOR(숫자)

-- CEIL과 대응되네요

-- 숫자보다 작거나 같은 최대의 정수를 보여줍니다.

결과는 정수입니다.

SELECT FLOOR(22.123) FROM DUAL;

>22

22.123은 22보다 크고 그 숫자보다 작거나 같은 최대 정수 22를 보여줍니다.

 

TRUNC(숫자, 자릿수)

--숫자에 대해 소수점의 자릿수에 1을 더한 위치에서 자릅니다.

--자릿수가 생략되면 역시 0이 됩니다.

ROUND 함수와 대응되네요.

SELECT TRUNC(22.1455, 3) FROM DUAL; 

>22.145

3번째 자리까지 표현하고 그 뒤는 버린다고 했으니 반올림 없이 바로 잘라버리면 됩니다.

 

위 숫자형 내장 함수는 실전에서도 정말 많이 사용됩니다.

그리고 그 특징을 잘 이해하고 있어야 실수를 하지 않습니다.

특히 이자 계산을 하는 경우

프로그램에서 반올림과 SQL에서 반올림이 다르거나

SQL에서도 다른 구문에서 다르게 설정해서 대사 과정에 차액이 발생하는 경우가 종종 있답니다.

ROUND, TRUNC, CEIL 은 특히 잘 살펴보고 샘플로 테스트해보고 사용하길 권장합니다.

오늘도 즐거운 코딩 하세요~

잘못된 정보나 수정이 필요한 부분은 댓글 주세요

감사합니다.

반응형