MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで時間に基づいて日付を抽出する方法:2つのブール条件を使ったクエリの書き方

MySQLでは、EXTRACT()関数とBETWEEN演算子を組み合わせることで、datetime型のカラムから時間帯に基づいてレコードを抽出できます。この記事では、実際にテーブルを作成し、時間条件を用いたクエリの実行方法を順を追って解説します。

1. テーブルの作成

まず、datetime型のカラムを持つテーブルを作成します。

mysql> create table DemoTable
-> (
-> AdmissionDate datetime
-> );
Query OK, 0 rows affected (0.75 sec)

2. レコードの挿入

次に、INSERT文を使ってサンプルデータをテーブルに挿入します。

mysql> insert into DemoTable values('2019-01-10 10:45:10');
Query OK, 1 row affected (0.30 sec)

mysql> insert into DemoTable values('2019-02-12 20:50:00');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('2019-02-12 16:10:19');
Query OK, 1 row affected (0.15 sec)

3. テーブルの内容を確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

+---------------------+
| AdmissionDate |
+---------------------+
| 2019-01-10 10:45:10 |
| 2019-02-12 20:50:00 |
| 2019-02-12 16:10:19 |
+---------------------+
3 rows in set (0.00 sec)

3件のレコードが登録されていることが確認できます。

4. 時間条件でレコードを抽出するクエリ

ここで、EXTRACT(HOUR from ...)を使って時刻の「時」の部分を取り出し、NOT BETWEENで特定の時間帯を除外するクエリを実行します。以下の例では、8時から10時以外の時間帯に該当するレコードのみを抽出しています。

mysql> select *from DemoTable where EXTRACT(HOUR from AdmissionDate) not between 8 and 10;

出力結果

+---------------------+
| AdmissionDate |
+---------------------+
| 2019-02-12 20:50:00 |
| 2019-02-12 16:10:19 |
+---------------------+
2 rows in set (0.00 sec)

解説

上記のクエリでは、EXTRACT(HOUR from AdmissionDate)によってdatetime型の値から「時」の数値(0〜23)を取得し、NOT BETWEEN 8 AND 10というブール条件で8時・9時・10時のレコードを除外しています。

その結果、10時45分のレコード(2019-01-10 10:45:10)は条件に該当するため除外され、20時50分と16時10分の2件のレコードだけが表示されました。

このように、EXTRACT関数とNOT BETWEENを組み合わせることで、特定の時間帯を除外した柔軟なデータ抽出が可能になります。逆に、特定の時間帯だけを取得したい場合は、BETWEENを使えば同様の方法で実現できます。

  1. MySQLクエリで日付・時刻の値を秒単位で加算(インクリメント)する方法

    MySQLで日付・時刻(DATETIME)の値に指定した秒数を加算したい場合は、DATE_ADD()関数とINTERVAL句を組み合わせて使用します。この記事では、実際にテーブルを作成し、秒単位で時刻をインクリメントする手順を具体例とともに解説します。 サンプルテーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1867     (     ArrivalTime datetime    &

  2. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)