どうも、hosigakiです!今日は、仕事中にデータチームの方に教えてもらった小技についてご紹介します!
日時をdate型に変換して日付指定
どのテーブルにも必ずと言っていいほど入っている「created_at」カラム。
以下のusersテーブルのように、created_at は日付の後ろに時刻まで入っています。
このような日時データの型はtimestamp型、もしくはdatetime型がほとんどです。
id | name | gender | age | created_at |
---|---|---|---|---|
1 | 太郎 | 男性 | 40 | 2022-1-1 01:56:14 |
2 | よしお | 男性 | 31 | 2022-1-1 10:04:45 |
3 | SAKI | 女性 | 34 | 2022-1-2 10:06:47 |
4 | れいか | 女性 | 30 | 2022-1-3 09:40:51 |
5 | ジム | 男性 | 29 | 2022-1-3 21:30:32 |
6 | さやか | 女性 | 30 | 2022-1-3 23:54:10 |
7 | ボブ | 男性 | 31 | 2022-1-4 15:58:07 |
8 | 健一 | 男性 | 40 | 2022-1-4 07:05:47 |
さて、例えば上記のテーブルから、2022年1月2日〜3日のレコードだけ抽出したい場合、皆様ならどのようなクエリを書くでしょうか?
以下は、私がこれまで書いていたクエリです↓
SELECT
*
FROM
users
WHERE
created_at BETWEEN "2022-1-2" AND "2022-1-3 23:59:59"
ただ、これだと毎回日時指定するたびに、23:59:59って書かなきゃいけないので、ちょっと面倒ですよね(^_^;)
そこで以下クエリのように、created_atを、
日時(timestamp型もしくはdatetime型) ↓ 日付(date型)
に変換することで、日付で範囲指定できるようになります。
SELECT
*
FROM
users
WHERE
DATE(created_at) BETWEEN "2022-1-2" AND "2022-1-3"
また、もしcreated_atがUTC(日本時間からマイナス9時間されている、世界基準の日時)の場合は、以下のように( )内でタイムゾーンを指定することで、日本時間に変換しつつ、同時にdate型に変換できます。
SELECT
*
FROM
users
WHERE
DATE(created_at, "Asia/Tokyo") BETWEEN "2022-1-2" AND "2022-1-3"
/* ↑ 日本時間に変換しつつ、date型に変換 */
みなさんもよかったら、この小技使ってみてくださいね!
最後まで読んでいただき、ありがとうございました!また次の記事でお会いしましょう(^^)/