作成日:2018-04-19, 更新日:2019-05-17
基本
下記のようなテーブルがあったとき。
id | price | order_at |
---|---|---|
1 | 4500 | 2018-04-05 |
2 | 3200 | 2018-04-10 |
3 | 4900 | 2018-04-10 |
4 | 4600 | 2018-04-15 |
5 | 3500 | 2018-04-19 |
各クエリ
内容 | where句 |
---|---|
「4/10以前(4/10を含む)」の指定 |
where `order_at`<='2018-04-10' |
「4/10未満(4/10を含まない)」の指定 |
where `order_at`<'2018-04-10' |
「4/10以降(4/10を含む)」の指定 |
where '2018-04-10'<=`order_at` |
「4/10超過(4/10を含まない)」の指定 |
where '2018-04-10'<`order_at` |
「4/1~4/10(4/1、4/10を含む)」の指定1 |
where '2018-04-01'<=`order_at` and `order_at`<='2018-04-10' |
「4/1~4/10(4/1、4/10を含む)」の指定2:between |
where `order_at` between '2018-04-01' and '2018-04-10' |
date型じゃなくdatetime型の場合のbetween
下記のようなテーブルがあったとき。
id | price | order_at |
---|---|---|
6 | 4500 | 2018-04-20 00:00:00 |
7 | 3200 | 2018-04-20 13:23:09 |
8 | 4900 | 2018-04-22 00:00:00 |
9 | 4600 | 2018-04-22 09:05:23 |
各クエリと結果
- 「4/20~4/22」でbetween(※「4/22」の「00:00:00」までが取得される)
-
`order_at` between '2018-04-20' and '2018-04-22'
id price order_at 6 4500 2018-04-20 00:00:00 7 3200 2018-04-20 13:23:09 8 4900 2018-04-22 00:00:00 - 4/22の終日まで欲しい(betweenじゃ無理かも)
- betweenじゃないけど・・・
'2018-04-20'<=`order_at` and `order_at`<'2018-04-23'
-
id price order_at 6 4500 2018-04-20 00:00:00 7 3200 2018-04-20 13:23:09 8 4900 2018-04-22 00:00:00 9 4600 2018-04-22 09:05:23 - ▼別案:カラムの値を日付型に変換させる
'2018-04-20'<=DATE_FORMAT(`order_at`, '%Y-%m-%d') and DATE_FORMAT(`order_at`, '%Y-%m-%d') <='2018-04-22'
→これならbetweenにしても大丈夫そう。
めも
- 「4/20~4/22のデータ」が欲しいときの指定方法1
-
'2018-04-20'<=`order_at` and `order_at`<'2018-04-23'
- 「4/20~4/22のデータ」が欲しいときの指定方法2
-
'2018-04-20'<=`order_at` and `order_at`<('2018-04-22' + interval 1 day)
※プログラムが絡むとコッチのほうが何かと都合がいい。
- 「4/20~4/22のデータ」が欲しいときの指定方法3
-
'2018-04-20 00:00:00'<=`order_at` and `order_at`<'2018-04-23 00:00:00'
※datetime型を対象にするんだから、コレが正しいやりかただと思う。
- 「4/20~4/22のデータ」が欲しいときの指定方法4
-
'2018-04-20 00:00:00'<=`order_at` and `order_at`<='2018-04-22 23:59:59'
※ミリ秒が無いならコレでも良いと思う。
範囲が1日だけの場合
クエリを単純に発行するなら別に関係ないけど、プログラムが絡むと引数を減らしたい。
▼「4/20のデータ」が欲しいときの指定方法
'2018-04-20'<=`order_at` and `order_at`<('2018-04-20' + interval 1 day)