데이터로그😎

[MySQL] 날짜형식 관련 함수 본문

SQL/MySQL

[MySQL] 날짜형식 관련 함수

지연v'_'v 2023. 12. 29. 12:57

테이블 컬럼 type 확인하기

HISTORY_DT라는 테이블이 있다고 가정하자.

이 때 테이블 내 column의 형식을 확인하고 싶다면, DESC + 테이블명 을 사용하면 된다.

DESC HISTORY_DT;

 

확인 결과, DT (날짜) 컬럼의 Type이 date이다. 만약 이 date타입의 컬럼을 문자열로 바꾸고 싶을 땐 어떻게 해야할까?

컬럼 타입
실제 컬럼

DATE_FORMAT : 날짜 데이터 →  문자열

날짜형 데이터를 문자열로 바꾸고 싶다면 DATE_FORMAT(변환할 날짜형식 컬럼, 변환형식) 을 사용할 수 있다.

변환 결과로 생성된 tr_date 1, 2,3 컬럼을 확인해보면 원하는 형식대로 변환된 것을 확인할 수 있다.

SELECT DATE_FORMAT(DT, '%Y%m%d') as tr_date,
	DATE_FORMAT(DT, '%Y-%m') as tr_date2,
    	DATE_FORMAT(DT, '%Y/%m') as tr_date3
FROM HISTORY_DT;

 

STR_TO_DATE   : 문자열 →  날짜 데이터

만약 문자열을 날짜로 바꾸고 싶을 때는 STR_TO_DATE(변환할 문자형 컬럼, 변환형식)을 사용할 수 있다. 

예를 들어보겠다. 만약 날짜가 '2019-01-02'인 row를 찾고싶다면? 이 때는 모든 DT 컬럼의 row를 문자로 바꾸어 아래와 같이 실행할 수도 있다. 그러나... row가 매우 많다면 시간이 굉장히 오래걸리겠지?

SELECT *
FROM HISTORY_DT
WHERE DATE_FORMAT(DT, '%Y%m%d') = '20190102'

 

 

따라서 아래와 같이 문자인 '2019-01-02'를 DATE타입으로 바꾸어 수행하는 것이 더 좋다.

SELECT *
FROM HISTORY_DT
WHERE DT = STR_TO_DATE('2019-01-02','%Y-%m-%d');

 

** 사실 MySQL은 아래와 같이 쿼리문을 실행해도 정상적으로 실행이 된다. 이는 자동변환이라는 개념 떄문이다. 상황에 따라 자료형을 자동으로 변환하는 것을 의미한다. 원칙상 서로 다른 자료형 간에는 연산이 불가하다. 그러므로 연산 시 자료형을 맞춰주는 것이 중요한데, MySQL에서는 문자-날짜 간 비교가 발생하면 문자를 자동으로 날짜로 변환해준다. 

하지만 자동변환을 너무 맹신하진 말고... 스스로 변환하는 습관을 들이자..!

SELECT *
FROM HISTORY_DT
WHERE DT = '20190102';

 

 

 

참고

https://wikidocs.net/131843

 

4.04.2 날짜 관련 함수

#### 4.4.2 날짜 관련 함수 날짜 데이터를 다루려면 STR_TO_DATE, DATE_FORMAT, DATE_ADD와 같은 함수를 기억해야 한다. STR_TO_DATE는…

wikidocs.net

 

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

[MySQL] 테이블 생성, 입력, 수정, 삭제  (0) 2023.12.29
[MySQL] 테이블 정보 확인  (0) 2023.12.29
[MySQL] REGEXP 함수  (1) 2023.12.20
[윈도우 함수] Lead, Lag 함수  (1) 2023.11.26
[윈도우 함수] RANK() OVER()  (0) 2023.11.24