Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

STR_TO_DATE() 함수의 형식 문자열과 날짜 문자열이 일치하지 않으면 MySQL은 무엇을 반환할까?

형식 문자열과 날짜 문자열이 일치하지 않을 때의 결과

MySQL의 STR_TO_DATE() 함수에서 지정된 형식 문자열(format string)과 날짜 문자열(date string)이 서로 일치하지 않으면, MySQL은 NULL 값을 출력으로 반환하고 경고(warning)를 함께 표시합니다.

아래 예제를 통해 직접 확인해 보겠습니다.

예제 1: 구분자(쉼표) 불일치

mysql> Select STR_TO_DATE('20172810', '%Y,%d%m');
+------------------------------------+
| STR_TO_DATE('20172810', '%Y,%d%m') |
+------------------------------------+
| NULL                               |
+------------------------------------+
1 row in set, 1 warning (0.00 sec)

위 쿼리가 NULL을 반환하는 이유는 다음과 같습니다. 형식 문자열에는 %Y 뒤에 쉼표(,)가 포함되어 있지만, 실제 날짜 문자열인 '20172810'에는 2017 뒤에 쉼표가 없기 때문입니다.

경고 메시지를 확인하려면 SHOW WARNINGS 명령을 실행하면 됩니다.

mysql> Show Warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1411
Message: Incorrect datetime value: '20172810' for function str_to_date
1 row in set (0.00 sec)

예제 2: 날짜 단위 순서 불일치

마찬가지로, 형식 문자열에 지정된 날짜 단위의 순서가 실제 날짜 문자열의 순서와 다른 경우에도 MySQL은 동일하게 NULL과 경고를 반환합니다.

mysql> Select STR_TO_DATE('20172810', '%d%m%Y');
+-----------------------------------+
| STR_TO_DATE('20172810', '%d%m%Y') |
+-----------------------------------+
| NULL                              |
+-----------------------------------+
1 row in set, 1 warning (0.00 sec)

위 쿼리에서는 형식 문자열의 단위 순서(%d → %m → %Y)가 날짜 문자열의 실제 순서(연도 → 월 → 일)와 다르게 지정되어 있습니다.

mysql> Show Warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1411
Message: Incorrect datetime value: '20172810' for function str_to_date
1 row in set (0.00 sec)

정리

STR_TO_DATE() 함수를 사용할 때는 형식 문자열의 구분자와 날짜 단위의 순서가 실제 날짜 문자열과 정확히 일치해야 합니다. 그렇지 않으면 함수는 오류 대신 NULL을 반환하고, 오류 코드 1411(Incorrect datetime value) 경고가 발생하므로 주의해야 합니다.