MySQL yyyy-mm-dd 形式の文字列をSTR_TO_DATE で日付に変換しようとするとNULLになってしまう

animal_dolphin-iruka-mysql-logo MySQL

 

事象

MySQL yyyy-mm-dd 形式の文字列をSTR_TO_DATE で日付に変換しようとするとNULLになってしまう。

以下の通り。

mysql> select str_to_date('2022-02-10', '%y%m%d');
+-------------------------------------+
| str_to_date('2022-02-10', '%Y%m%d') |
+-------------------------------------+
| NULL |
+-------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql>

原因

MySQL公式のマニュアルを見てみる。

日付時間値が不正な場合は、STR_TO_DATE() によって NULL が返され

 

format 内のリテラル文字は、str 内と完全に一致する必要があります

MySQL公式

 

…あ!そゆこと!

str_to_dateの仕様を勘違いしていた!

str_to_date(日付文字列, 日付フォーマット)

の、引数1と引数2(日付文字列, 日付フォーマット) のフォーマットが一致した場合に日付にしてくれるんや!

 

x 引数1の日付文字列を引数2のフォーマットに変換して日付で返してくれると思ってた…orz

 

対応

引数1と引数2のフォーマットをあわせる。

例)

mysql> select str_to_date('2022-02-10', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2022-02-10', '%Y-%m-%d') |
+---------------------------------------+
| 2022-02-10 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql>

 

 

mysql> select str_to_date('22-02-10', '%y-%m-%d');
+-------------------------------------+
| str_to_date('22-02-10', '%y-%m-%d') |
+-------------------------------------+
| 2022-02-10 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

コメント

タイトルとURLをコピーしました