事象
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 内と完全に一致する必要があります
…あ!そゆこと!
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>
コメント