자격증/SQLD

[SQL 첫걸음] 14강. 날짜 연산

동호다찌 2022. 4. 4. 09:24

CURREUNT_TIMESTAMP CURRENT_DATE INTERVAL

SQL에서의 날짜

시스템 날짜

  • RDBMS에서는 시스템 날짜와 시간을 확인하는 함수를 제공한다.
  • CURREUNT_TIMESTAMP는 함수이지만 인수를 필요로 하지 않는다.
  • 즉, 괄호를 사용하지 않는 함수이다.
#CURREUNT_TIMESTAMP로 시스템 날짜 확인
SELECT CURRENT_TIMESTAMP;
# 2020-05-03 20:00:30
  • 위의 예문에서 FROM구를 생략했는데, SELECT구만으로도 실행되지만, Oracle과 같이 전통적인 데이터베이스에서는 FROM구는 생략할 수 없으니 주의하자.

날짜 서식

  • 날짜 데이터를 데이터베이스에 저장할 때는 CURREUNT_TIMESTAMP를 사용해서 시스템 상의 날짜를 저장할 수 있다.
  • 임의의 날짜를 저장하기 위해서는 직접 날짜 데이터를 지정해야 한다.
  • 날짜 서식은 국가별로 다르다.
    (ex) 한국과 일본에서는 연원일을 슬래시나 하이픈으로 구분해 표기하는 경우가 많고,
    미국에서는 월의 경우 숫자를 대신해 Jan, Feb 등으로 표기하며 일월연도순으로 표기한다.)

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

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

미국의 날짜 서식 예

  • 03 May 2020

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

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

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

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

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

날짜의 덧셈과 뺄셈

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

날짜형 간의 덧셈

#시스템 날짜의 1일 후를 계산하기
SELECT CURRENT_DATE + INTERVAL 1 DAY;
# 2020-05-04
  • INTERVAL 1 DAY는 1일 후라는 의미의 기간형 상수이다.
  • 기간형 상수의 기술방법은 데이터베이스마다 조금씩 다르고 세세한 부분까지 표준화되지는 않았다.

날짜형 간의 뺄셈

  • 날짜시간형 데이터 간에 뺄셈을 통해, 두 날짜 사이에 차이가 얼마나 발생하는지 계산할 수 있다.
Oracle> '2020-05-03' - '2020-01-01';
mysql> DATEDIFF('2020-05-03', '2020-01-01');