MySQL STR_TO_DATEは日時を返す、DATE_FORMATは文字列を返す | クズリーマンのカス備忘録

MySQL STR_TO_DATEは日時を返す、DATE_FORMATは文字列を返す

animal_dolphin-iruka-mysql-logo MySQL
スポンサーリンク

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

 

その他参考

MySQL公式

 

 

 

コメント

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