SQL 첫걸음- 14강

3장. 정렬과 연산

14강. 날짜 연산

1
CURREUNT_TIMESTAMP CURRENT_DATE INTERVAL

1. SQL에서의 날짜

1-1) 시스템 날짜

RDBMS에서는 시스템 날짜와 시간을 확인하는 함수를 제공한다.
CURREUNT_TIMESTAMP는 함수이지만 인수를 필요로 하지 않는다.
즉, 괄호를 사용하지 않는 함수이다.

1
2
3
# CURREUNT_TIMESTAMP로 시스템 날짜 확인
SELECT CURRENT_TIMESTAMP;
# 2020-05-03 20:00:30

위의 예문에서 FROM구를 생략했는데, SELECT구만으로도 실행되지만,
Oracle과 같이 전통적인 데이터베이스에서는 FROM구는 생략할 수 없으니 주의하자.

1-2) 날짜 서식

날짜 데이터를 데이터베이스에 저장할 때는 CURREUNT_TIMESTAMP를 사용해서
시스템 상의 날짜를 저장할 수 있다.

그렇다면, 임의의 날짜를 저장하고 싶을 때는 어떻게 해야할까?
임의의 날짜를 저장하기 위해서는 직접 날짜 데이터를 지정해야 한다.

날짜 서식은 국가별로 다르다.
(ex) 한국과 일본에서는 연원일을 슬래시나 하이픈으로 구분해 표기하는 경우가 많고,
미국에서는 월의 경우 숫자를 대신해 Jan, Feb 등으로 표기하며 일월연도순으로 표기한다.)

ex1) 한국이나 일본의 날짜 서식 예

  • 2020/05/03
  • 2020-05-03

ex2) 미국의 날짜 서식 예

  • 03 May 2020

이처럼 날짜를 표기하는 방식이 다양하기 때문에 데이터베이스 제품은
날짜 데이터의 서식을 임의로 지정하고 변환할 수 있는 함수를 지원한다.

Oracle의 경우, TO_DATE함수를 이용해서 문자열 데이터를 날짜형 데이터로
변환할 수 있고, 서식도 별도로 지정할 수 있다.

1
2
Oracle> SELECT TO_DATE('2020/05/03', 'YYYY/MM/DD') FROM TABLE;
-- SELECT TO_DATE([컬럼명],[포맷형식])FROM [테이블명]

반대로 날짜형 데이터를 문자열 데이터로 변환할 때는 TO_CHAR 함수를 사용한다.

1
2
3
Oracle> SELECT TO_CHAR(COLUMN, 'YYYYMMDD HH24:MI:SS') FROM TABLE;
-- SELECT TO_CHAR([컬럼명]) FROM [테이블명]
-- 20200503 23:10:10

2. 날짜의 덧셈과 뺄셈

날짜시간형 데이터는 기간형 수치데이터와 덧셈 및 뺄셈을 할 수 있다.
특정일로부터 1일 후는 a + 1DAY, 1일 전이라면 a - 1Day로 하면 된다.

2-1) 날짜형 간의 덧셈

1
2
3
# 시스템 날짜의 1일 후를 계산하기
SELECT CURRENT_DATE + INTERVAL 1 DAY;
# 2020-05-04

INTERVAL 1 DAY는 1일 후라는 의미의 기간형 상수이다.
기간형 상수의 기술방법은 데이터베이스마다 조금씩 다르고 세세한 부분까지 표준화되지는 않았다.

2-1) 날짜형 간의 뺄셈

날짜시간형 데이터 간에 뺄셈을 통해, 두 날짜 사이에 차이가 얼마나 발생하는지 계산할 수 있다.

1
Oracle> '2020-05-03' - '2020-01-01';
1
mysql> DATEDIFF('2020-05-03', '2020-01-01');