데이터로그😎
[MySQL] 날짜형식 관련 함수 본문
테이블 컬럼 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';
참고
'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 |