파일명 혹은 변수에 '-'가 제거된 날짜값을 사용하게 되는데(20220715)

날짜 형식으로 변환할 때 MySQL 에서는 str_to_date 함수를 사용할 수 있습니다.

%Y 4자리 년도 %T hh:mm:ss
%y 2자리 년도 %r hh:mm:ss AM/PM
%m 2자리 월(01, 02, 10, 11 ...) %M 월 (영문 전체 March, July ...)
%c 월(1, 2, 10, 11 ...) %b 월 (영문 축약 Mar, Jul ...)
%d 2자리 일(01, 01, 10, 11 ...) %W 요일 (영문 전체 Monday, Thursday ...)
%e 일(1, 2, 10, 11 ...) %a 요일 (영문 축약 Mon, Thu ...) 
%H 24시간제 시간    
%l 12시간제 시간    
%i 2자리 분 (05, 15 ...)    
%S 2자리 초 (05, 15 ...)    

사용 방법은 위 포맷을 참고하여 아래와 같이 사용해 주시면 됩니다.

하지만 아래와 같이 31을 넘어가는 날짜가 입력되면 null을 출력하지만 

4월31을 입력할 경우 4월30일 에서 하루 지난 5월1일을 출력하는 오류가 있습니다.

-- MySQL 5.7.37 / MySQL 8.0.23 / MariaDB 10.1.48 모두에서 아래와 같이 출력 됩니다.

select str_to_date(20220230, '%Y%m%d');   -- 2022-03-02 출력 (Error: 22년 2월은 28일 까지만 존재)
select str_to_date(20220430, '%Y%m%d');   -- 2022-04-30 출력
select str_to_date(20220431, '%Y%m%d');   -- 2022-05-01 출력 (Error: 4월은 30일 까지만 존재함)
select str_to_date(20220432, '%Y%m%d');   -- null 출력
select str_to_date(20220531, '%Y%m%d');   -- 2022-05-31 출력
select str_to_date(20220532, '%Y%m%d');   -- null 출력

입력된 날짜의 무결성이 중요하다면 함수를 만들어 사용하는 것이 좋을 것 같습니다.

+ Recent posts