본문 바로가기
CS/DataBase

데이터베이스 첫걸음 정리 - 14장. 날짜 연산

by yongckim 2022. 9. 5.
728x90
반응형

날짜/시간 데이터를 저장하는 방법은 데이터베이스 제품에 따라 크게 달라집니다.

날짜와 시간 전부를 저장할 수 있는 자료형을 지원하거나, 혹은 날짜는 DATE형, 시간은 TIME 형, 날짜와 시간은 DATETIME 형과 같이 세분화해 지원하는 데이터베이스 제품도 있습니다.

이번에는 날짜와 시간을 초 단위로 저장할 수 있는 날짜시간형을 기준으로 설명하겠습니다.

SQL에서의 날짜

날짜나 시간 데이터는 수치 데이터와 같이 연산을 할 수 있습니다.

날짜시간 데이터를 연산하면 결괏값으로 동일한 날짜시간 유형의 데이터를 반환하는 경우도 있으며 기간의 차를 나타내는 기간형 데이터를 반환하는 경우도 있습니다.

기간형은 “10일간", “2시간 10분"과 같이 시간의 간격을 표현할 수 있습니다.

시스템 날짜

날짜시간 데이터 연산을 설명하기 이전에 시스템 날짜를 확인하는 방법에 관해 설명하겠습니다.

컴퓨터에는 반드시 시계가 내장되어 있습니다.

네트워크나 주변기기와 데이터를 통신하기 위해서는 시간을 정확하게 측정할 필요가 있기 때문입니다.

“시스템 날짜"란 이 같은 하드웨어 상의 시계로부터 실시간으로 얻을 수 있는 일시적인 데이터를 말합니다.

RDBMS에서도 시스템 날짜와 시간을 확인하는 함수를 제공합니다.

표준 SQL에서는 CURRENT_TIMESTAMP라는 이름의 함수로 실행했을때를 기준으로 시간을 표시합니다.

CURRENT_TIMESTAMP는 함수임에도 인수가 필요하지 않으며, 일반적인 함수와는 달리 인수를 지정할 필요가 없으므로 괄호를 사용하지 않는 특수한 함수입니다.

SELECT CURRENT_TIMESTAMP;

날짜 서식

날짜 데이터를 데이터베이스에 저장할 경우 CURRENT_TIMESTAMP를 사용해 시스템 상의 날짜를 저장할 수 있습니다.

다만 임의의 날짜를 저장하고 싶을 경우에는 직접 날짜 데이터를 지정해야 합니다.

날짜 서식은 국가별로 다르며, 한국과 일본에서는 연월일을 슬래시나 하이픈으로 구분해 표기하는 경우가 많습니다.

미국의 경우, 월의 경우 숫자를 대신해서 Jan, Feb 등과 같은 월을 표현하는 문자를 사용하며 일반적으로 일월년 순으로 표기합니다.

  • 2014/01/25
  • 2014-01-25
  • 25 Jan 2014

이처럼 날짜를 표기하는 방식이 다양한 가운데 대부분의 데이터베이스 제품은 날짜 데이터의 서식을 임의로 지정, 변환할 수 있는 함수를 지원합니다.

Oracle의 경우 TO_DATE 함수를 사용해 문자열 데이터를 날짜형 데이터로 변환할 수 있으며 서식 또한 별도로 지정할 수 있습니다.

TO_DATE(’2014/01/25’, ‘YYYY/MM/DD’)

여기서 ‘YYYY/MM/DD’가 서식 부분입니다.

YYYY가 년이고 MM이 월, DD가 일을 의미합니다.

반대로 날짜형 데이터를 서식에 맞춰 변환해 문자열 데이터로 출력하는 함수도 존재합니다.

Oracle의 경우 TO_CHAR 함수가 그에 해당합니다.

날짜형 간의 덧셈

날짜 시간형 데이터는 기간형 수치데이터와 덧셈을 할 수 있습니다.

날짜시간형 데이터에 기간형 수치데이터를 더하면 날짜 시간형 데이터가 반환됩니다.

예를 들어 특정일로부터 1일 후를 계산하고 싶다면 a + 1 DAY라는 식으로 계산할 수 있습니다.

1일 전이라면 a - 1 DAY로 하면 됩니다.

SELECT CURRENT_DATE + INTERVAL 1 DAY;

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

기간형 상수의 기술방법은 데이터베이스마다 조금씩 다르며 세세한 부분까지 표준화가 이루어지지는 않았습니다.

날짜형 간의 뺄셈

날짜형간의 덧셈을 했던 것 처럼 뺄셈도할 수 있습니다.

예를 들면 Oracle에서는 ‘2014-02-28’ - ‘2014-01-01’ 이라고 한다면 두 날짜 사시에 차이가 얼마나 발생하는지 계산할 수 있습니다.

MySQL에서는 DATEDIFF(’날짜 ‘날짜’)로 계산할 수 있습니다.

SELECT DATEDIFF('2022-08-27', '2022-08-01');

정리

  • SQL에서 날짜형 데이터도 연산이 가능합니다
  • CURRNET_DATE 함수를 통해 현재 날짜를 불러올 수 있습니다.
  • SQL에서 날짜 서식을 통해 날짜를 지정할 수 있다.
  • INTERVAL을 사용하여 지정한 날짜의 덧셈 뺄셈을 할 수 있다
  • DATEDIFF 함수를 통해 두 날짜간의 차이를 구할 수 있다.
반응형