見てほしい人
MySQLでいろんな期間のデータを取得したいけど、書き方がわからぬという方。
私自身、難しいことは言わず、ここからここまでの期間のデータがほしいだけなんじゃ!と思いつつ、シンタックスエラーに悩まされたり、うまくいかないことが多かったので、個人的に年月日操作でよく使ったものをまとめてみました。
(紹介するもの以外にもいろいろ書き方はあるみたいなので、気になる方は調べてみてください!)
現在の年月日(時刻)
now();
-- 2020-09-04 15:17:11
現在の年月日
curdate();
-- 2020-09-04
現在の月日
date_format(now(), "%c月%e日");
-- 9月4日
現在の時間
time(now());
-- 15:57:09
今月
month(now());
-- 9
今日
day(now());
-- 4
今年
year(now());
-- 2020
去年
year(now())-1;
-- 2019
現在から20日後の年月日(時刻)
DATE_ADD(now(), INTERVAL 20 DAY);
-- 2020-09-24 16:14:01
現在から3ヶ月後の年月日(時刻)
DATE_ADD(now(), INTERVAL 3 MONTH);
-- 2020-12-04 16:16:56
現在から1年前の年月日(時刻)
DATE_ADD(now(), INTERVAL -1 YEAR);
-- 2019-09-04 16:06:03
INTERVAL
の後の数値にマイナスをつけると、〇〇前になります。
今年の1月1日〜今年の12月31日まで
between CONCAT(year(now()),'-01-01') and CONCAT(year(now()),'-12-31');
2年前の1月1日〜現在まで
between CONCAT(year(now())-2,'-01-01') and now();
CONCAT()
を使って、年 と 月日 を結合させています。
もっといい方法があるかもしれませんが…。
where文と合わせて、データの日付指定に使ってみてください。
例
select * from 商品
where 売れた日 between CONCAT(year(now())-2,'-01-01') and now();
-- 2年前の1月1日から現在までに 売れた 商品 のデータを出す。
#まとめ
何かとデータが必要になる時に、日付指定とかと格闘することとなると思います。
少なくとも私は、毎度忘れては調べの繰り返しでした。
少しでも誰かのお役に立てたら幸いです。