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

MySQLで日時(DateTime)から3時間を引く2つの方法

MySQLで日時(DateTime)から3時間を引くには、大きく分けて2つの方法があります。1つ目はDATE_ADD()関数に負の値を指定する方法、2つ目はDATE_SUB()関数を使う方法です。それぞれ具体的な手順と実行結果とあわせて解説します。

方法1:DATE_ADD()を使う

DATE_ADD()関数にマイナス3時間のインターバルを指定すると、指定した日時から3時間前の日時を取得できます。テーブルのカラムに対して使う場合は、次のように記述します。

select date_add(yourColumnName, interval -3 hour) from yourTableName;

方法2:DATE_SUB()を使う

DATE_SUB()関数は、指定したインターバルを日時から減算するための関数です。減算したい時間をそのまま正の値で指定できるため、意図が伝わりやすいのが特徴です。

select date_sub(yourColumnName, interval 3 hour) from yourTableName;

実際に試してみよう

現在の日時を確認する

まず、now()関数で現在の日時を取得します。

mysql> select now();

実行結果は次のとおりです。

+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:13:23 |
+---------------------+
1 row in set (0.00 sec)

DATE_ADD()で3時間を引く

date_add()に負のインターバル(-3 hour)を指定して、現在日時から3時間を引いてみましょう。

mysql> select date_add(now(), interval -3 hour);

実行結果:

+----------------------------------+
| date_add(now(),interval -3 hour) |
+----------------------------------+
| 2018-11-30 07:13:28              |
+----------------------------------+
1 row in set (0.00 sec)

元の時刻「10:13:23」から3時間引かれた「07:13:28」が正しく返されています。

DATE_SUB()で3時間を引く

続いて、もう一度現在の日時を取得します。

mysql> select now();

実行結果:

+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:14:12 |
+---------------------+
1 row in set (0.00 sec)

この日時に対して、date_sub()を使って3時間を減算します。

mysql> select date_sub(now(), interval 3 hour);

実行結果:

+---------------------------------+
| date_sub(now(),interval 3 hour) |
+---------------------------------+
| 2018-11-30 07:14:25             |
+---------------------------------+
1 row in set (0.00 sec)

こちらも「10:14:12」から3時間引かれた「07:14:25」が返されました。

まとめ

MySQLで日時から特定の時間を引く場合、以下のいずれかの方法が使えます。

  • DATE_ADD():負のインターバル(interval -3 hour)を指定する
  • DATE_SUB():正のインターバル(interval 3 hour)を指定する

どちらも同じ結果が得られるため、クエリの可読性やチーム内のコーディング規約に応じて使い分けることをおすすめします。なお、時間だけでなく日・週・月なども同じ構文で操作できますので、応用範囲は非常に広いです。

  1. MySQLで日時をUnixタイムスタンプに変換する方法

    MySQLでは、UNIX_TIMESTAMP() 関数を使用することで、日時の値をUnixタイムスタンプに変換できます。Unixタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を表す数値で、システム間での日時データのやり取りに広く使われています。UNIX_TIMESTAMP()関数で日時をUnixタイムスタンプに変換するまず、STR_TO_DATE()関数で文字列の日時を日付型に変換し、その結果をUNIX_TIMESTAMP()関数に渡すことで、Unixタイムスタンプを取得できます。以下がそのクエリの例です。 SELECT UNIX_TIMESTAMP(STR_TO

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected