STR_TO_DATE と DATE_FORMAT の違い
STR_TO_DATEがエラーになる記事を書いた後に、DATE_FORMATじゃだめなの?と思った。
DATE_FORMATなら以下のようにエラーにならない。
mysql> select date_format(‘2022-02-10’, ‘%y-%m-%d’);
+—————————————+
| date_format(‘2022-02-10’, ‘%y-%m-%d’) |
+—————————————+
| 22-02-10 |
+—————————————+
1 row in set (0.00 sec)mysql>
この、date_formatの部分がSTR_TO_DATEならエラーになる。
。。。
と思ったら、
DATE_FORMATDATEをSTRINGに変換します。
STR_TO_DATESTRINGをDATEに変換します。
StackOverflow
ってことなんですね。
この両者は、逆の動きみたいになりますな。
場合によっては同じ結果が得られる
まーでも、STR_TO_DATEでなくDATE_FORMATにしちまっても動くことは結構ありそう。
例えば以下みたいな場合。
tbl1テーブルから、2022年2月10日 のレコードだけ取り出したい。
select * from tbl1 WHERE STR_TO_DATE('2022-02-10', '%Y%m%d') = date-col1
これは動かないので例えば↓みたく変える必要がある。
select * from tbl1 WHERE STR_TO_DATE('2022-02-10', '%Y-%m-%d') = date-col1
が、↓STR_TO_DATE を、 DATE_FORMATに変えるだけでも同じ結果は得られる。
select * from tbl1 WHERE DATE_FORMAT('20220210', '%Y%m%d') = date-col1
あ、てか、この例の場合は、↓でいいのか。わざわざ変換せんでも
select * from tbl1 WHERE '20220210' = date-col1
その他参考
コメント