[SQL] 날짜 및 시간 데이터

전도운·2024년 7월 4일
0
post-custom-banner

코딩을 할 때 날짜 및 시간데이터는 여간 까다로운 것이 아니다. 연/월/일/시/분/초 등 데이터를 구성하는 요소 하나하나가 독립된 개체로 의미를 가지며 이를 표현하는 방법 또한 각양각생이기 떄문이다. 특히 날짜 및 시간데이터는 시계열데이터로 단순 인덱스의 의미를 벗어나 순서가 매우 중요하기 때문에 데이터 전처리할 때 데이터가 훼손되거나 왜곡되지 않게 주의를 기울여야 한다.

본 글에서는 날짜 및 시간 데이터의 유형과 이를 다루는 주요 SQL 함수를 살펴보고자 한다.

1. 데이터 유형

  • DATE 타입

    • 연-월-일로 구성된 데이터 타입을 의미한다. 보통 '2024-07-04'와 같은 형식으로 관리된다. 시간데이터가 포함되어있지 않으므로 시간을 다루는 함수 적용 시 00:00:00이 반환된다.
  • DATETIME 타입

    • 연-월-일 시:분:초 로 구성된 데이터 타입을 의미한다. 보통 '2024-07-04 11:24:30'와 같은 형식으로 관리된다. DATE 함수를 이용해 날짜만 추출 가능하다.
  • TIMESTAMP 타입

    • 기준시각인 '1970-01-01 00:00:00' UTC 이후 흘러간 초(SECONDS)로 구성된 데이터타입을 의미한다. (기준시각은 0 / '2024-07-24 11:24:30'은 1721820270) 주로 정밀한 시간계산에 활용한다.

2. 함수

  • DATE 타입 함수
    함수설명사용 예시
    CURDATE()현재 날짜를 반환SELECT CURDATE()
    (DATE 타입)→ 2024-07-04
    DATE(DATETIME)날짜 부분만 반환SELECT DATE('2024-07-04 11:24:30')
    (DATE 타입)→ 2024-07-04
    YEAR(DATE OR DATETIME), MONTH("), DAY(")연/월/일만 반환SELECT YEAR('2024-07-04')
    (NUMBER 타입)→ 2024
    DATE_FORMAT(DATE OR DATETIME, FORMAT)*날짜를 FORMAT으로 변환SELECT DATE_FORMAT('2024-07-04', '%Y년 m월')
    (STRING 타입)→ 2024년 07월
    STR_TO_DATE(STRING, FORMAT)*문자열을 FORMAT에 따라 날짜데이터로 인식(DATE_FORMAT 함수와 반대 기능)SELECT STR_TO_DATE('2024-07-24 11:24:30', '%Y-%m-%d %h:%i:%s')
    (DATETIME 타입)→ 2024-07-24 11:24:30
    DATE_SUB(date,INTERVAL # unit)DATE에 설정한 기간을 뺌DATE_SUB('2018-05-01',INTERVAL 1 YEAR)
    DATE_ADD(date,INTERVAL # unit)DATE에 설정한 기간을 더함DATE_ADD('2018-05-01',INTERVAL 1 DAY)
  • DATETIME 타입 함수
    함수설명사용 예시
    CURTIME()현재 시간을 반환SELECT CURDATE()
    (TIME 타입)→ 11:24:30
    NOW()현재 날짜와 시간을 반환SELECT NOW()
    (DATETIME 타입)→ 2024-07-04 11:24:30
    HOUR(DATETIME OR TIME), MINUTE("), SECOND("), MICROSECOND(")시/분/초/밀리초만 반환SELECT HOUR('11:24:30')
    (NUMBER 타입)→ 11
  • TIMESTAMP 타입 함수
    함수설명사용 예시
    UNIX_TIMESTAMP(DATETIME)유닉스 타임스탬프를 반환SELECT UNIX_TIMESTAMP('2024-07-24 11:24:30')
    (NUMBER 타입)→ 1721820270
    FROM_UNIXTIME(TIMESTAMP)유닉스 타임스탬프를 날짜로 변환SELECT FROM_UNIXTIME(1721820270)
    (DATETIME 타입)→ 2024-07-24 11:24:30
profile
의미 있는 한걸음을 추구합니다.
post-custom-banner

0개의 댓글