【SQL】レコードを日付で絞る際の、便利な小技!

【SQL】レコードを日時で絞る際の、便利な小技!

どうも、hosigakiです!今日は、仕事中にデータチームの方に教えてもらった小技についてご紹介します!

日時をdate型に変換して日付指定

どのテーブルにも必ずと言っていいほど入っている「created_at」カラム。
以下のusersテーブルのように、created_at は日付の後ろに時刻まで入っています。

このような日時データの型はtimestamp型、もしくはdatetime型がほとんどです。

idnamegenderagecreated_at
1太郎男性402022-1-1 01:56:14
2よしお男性312022-1-1 10:04:45
3SAKI女性342022-1-2 10:06:47
4れいか女性302022-1-3 09:40:51
5ジム男性292022-1-3 21:30:32
6さやか女性302022-1-3 23:54:10
7ボブ男性312022-1-4 15:58:07
8健一男性402022-1-4 07:05:47
usersテーブル

さて、例えば上記のテーブルから、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型に変換 */

みなさんもよかったら、この小技使ってみてくださいね!

最後まで読んでいただき、ありがとうございました!また次の記事でお会いしましょう(^^)/

-SQL
-