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)を指定する
どちらも同じ結果が得られるため、クエリの可読性やチーム内のコーディング規約に応じて使い分けることをおすすめします。なお、時間だけでなく日・週・月なども同じ構文で操作できますので、応用範囲は非常に広いです。
-
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
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected