본문 바로가기

DEVELOPMENT/SQL

[SQL] 날짜 연산

SQL 날짜

 

날짜나 시간 데이터는 수치 데이터와 같이 사칙 연산을 할 수 있다. 날짜시간 데이터를 연산하면 결괏값으로 동일한 날짜시간 유형의 데이터를 반환하는 경우도 있으며 기간(간격)의 차를 나타내는 기간형(interval) 데이터를 반환하는 경우도 있다. 기간형은 '10일간', '2시간10분'과 같이 시간의 간격을 표현할 수 있다.

 

1. 시스템 날짜

시스템 날짜란 하드웨어 상의 시계로부터 실시간으로 얻을 수 있는 일시적인 데이터를 말한다. RDBMS에서도 시스템 날짜와 시간을 확인하는 함수를 제공한다.

표준 SQL에서는 'CURRENT_TIMESTAMP'라는 함수로 실행했을 때를 기준으로 시간을 표시한다.

CURRENTA_TIMESTAMP는 일반적인 함수와는 달리 인수를 지정할 필요가 없으므로 괄호를 사용하지 않는 특수한 함수이다.

-- CURRENT_TIMESTAMP로 시스템 날짜 확인
SELECT CURRENT_TIMESTAMP; -- 2023-05-30 12:32:30

 

2. 날짜 서식

날짜 데이터를 데이터베이스에 저장할 경우 CURRENT_TIMESTAMP를 사용해 시스템 상의 날짜를 저장할 수 있다. 다만 임의의 날짜를 저장하고 싶을 경우에는 직접 날짜 데이터를 지정해야 한다.

 

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

이처럼 날짜를 표기하는 방식이 다양한 가운데 대부분의 데이터베이스 제품은 날짜 데이터의 서식을 임의로 지정, 변환할 수 있는 함수를 지원한다. Oracle의 경우 TO_DATE 함수를 사용해 문자열 데이터를 날짜형 데이터로 변환할 수 있으며 서식 또한 별도로 지정할 수 있다.

TO_DATE('2023/05/30', 'YYYY/MM/DD')

 

반대로 날짜형 데이터를 서식에 맞춰 변환해 문자열 데이터로 출력하는 함수도 존재한다. Oracle의 경우 TO_CHAR 함수가 그에 해당한다.

 

 

날짜의 덧셈과 뺄셈

 

날짜시간형 데이터는 기간형 수치데이터와 덧셈 및 뺄셈을 할 수 있다. 날짜시간형 데이터에 기간형 수치데이터를 더하거나 빼면 날짜시간형 데이터가 반환된다. 

-- 날짜를 연산해 시스템 날짜의 1일 후를 검색
SELECT CURRENT_DATE + INTERVAL 1 DAY; -- 2023-05-31

CURRENT_DATE는 시스템 날짜의 날짜만 확인하는 함수이며, INTERVAL 1 DAY는 '1일 후'라는 의미의 기간형 상수이다.

 

날짜시간형 데이터 간에 뺄셈을 할 수 있다. 

-- Oracle에서 날짜형 간의 뺄셈
SELECT '2023-05-31' - '2023-05-01' -- 30

-- MySQL에서 날짜형 간의 뺄셈
SELECT DATEDIFF('2023-05-31', '2023-05-01'); -- 30

 

 

 

 

 

'DEVELOPMENT > SQL' 카테고리의 다른 글

[SQL] 집계함수  (0) 2023.05.30
[SQL] CASE 문  (0) 2023.05.30
[SQL] 문자열 연산  (0) 2023.05.30
[SQL] 결과 행 제한  (0) 2023.05.30
[SQL] 패턴 매칭  (0) 2023.05.30