MySQLの日付と時刻の間隔計算の分析例

MySQLの日付と時刻の間隔計算の分析例

この記事では、例を使用して、MySQL の日付と時刻の間隔計算について説明します。ご参考までに、詳細は以下の通りです。

まず、MySQL の間隔値は主に日付と時刻の計算に使用されることを明確にする必要があります。間隔値を作成する場合は、次の式を使用できます。

区間式単位

次に、INTERVAL キーワードは間隔値を決定する expr であり、間隔の単位を指定する unit であることを理解する必要があります。 たとえば、1 日の間隔を作成するには、次の式を使用します。

間隔 1日

ただし、INTERVAL と UNIT は大文字と小文字を区別しないため、次の式は上記の式と同等になります。

間隔 1日

日付と時刻の演算における間隔値の実際の使用法と構文は、次のコードで確認できます。

日付 + INTERVAL 式 単位
日付 - INTERVAL 式 単位

間隔値は、DATE_ADD、DATE_SUB、TIMESTAMPADD、TIMESTAMPDIFF などのさまざまな時間関数でも使用されます。 MySQL では、次の表に示すように、expr と unit の標準形式が定義されています。

ユニット式 (expr)
日数
曜日_時間「日数 時間」
デイ_マイクロ秒「日数 時間:分:秒.マイクロ秒」
日_分「日 時間:分」
DAY_SECOND 「日 時間:分:秒」
時間営業時間
時間_マイクロ秒「時間:分:秒.マイクロ秒」
時間_分「時間:分」
時間_秒「時間:分:秒」
マイクロ秒マイクロ秒
分_マイクロ秒「分:秒.マイクロ秒」
分_秒「分:秒」
四半期クォーター
2番
秒_マイクロ秒「秒.マイクロ秒」
数週間
年_月「年~月」

例を見てみましょう。次の SQL ステートメントは、日付 2020-01-01 に 1 日を追加し、結果を 2020-01-02 として返します。

mysql> '2020-01-01' + 間隔 1 日を選択します。
+---------------------------------+
| '2020-01-01' + 間隔 1 日 |
+---------------------------------+
| 2020-01-02 |
+---------------------------------+
セット内の1行(0.01秒)

DATE 値または DATETIME 値を含む式で間隔値を使用し、間隔値が式の右側にある場合は、次の例に示すように、expr の負の値を使用できます。

mysql> '2020-01-01' + 間隔 -1 日を選択します。
+--------------------------------+
| '2020-01-01' + 間隔 -1 日 |
+--------------------------------+
| 2019-12-31 |
+--------------------------------+
セット内の1行

DATE_ADD と DATE_SUB を使用して日付値に 1 か月を加算/減算する方法を見てみましょう。

mysql> SELECT DATE_ADD('2020-01-01', INTERVAL 1 MONTH) 1_MONTH_LATER, 
    DATE_SUB('2020-01-01',間隔1か月) 1_MONTH_BEFORE;
+---------------+----------------+
| 1 か月後 | 1 か月前 |
+---------------+----------------+
| 2020-02-01 | 2019-12-01 |
+---------------+----------------+
セット内の1行

TIMESTAMPADD(unit, interval, expression) 関数を使用してタイムスタンプ値に 30 分を追加する SQL ステートメントを見てみましょう。

mysql> SELECT TIMESTAMPADD(MINUTE,30,'2020-01-01') 30_MINUTES_LATER;
+---------------------+
| 30_分後 |
+---------------------+
| 2020-01-01 00:30:00 |
+---------------------+
セット内の1行

ここまで説明しても、まだ少し混乱しているかもしれません。心配しないでください。具体的な操作を見てみましょう。デモ用に、members という新しいテーブルを作成します。

CREATE TABLEメンバーシップ(
  id INT AUTO_INCREMENT 主キー、
  電子メール VARCHAR(355) NOT NULL,
  プラン VARCHAR(255) NOT NULL、
  期限切れ日 日付 NULL ではありません
);

上記のメンバーシップ テーブルでは、expired_date 列に各メンバーのメンバーシップの有効期限が格納されています。次に、メンバーシップ テーブルにデータを挿入してみましょう。

メンバーシップに挿入(メール、プラン、有効期限)
値('[email protected]','ゴールド','2018-07-13'),
   ('[email protected]','プラチナ','2018-07-10'),
   ('[email protected]','シルバー','2018-07-15'),
   ('[email protected]','ゴールド','2018-07-20'),
   ('[email protected]','シルバー','2018-07-08');

ここで、今日が 2018-07-06 であると仮定し、SQL ステートメントを使用して、今後 7 日以内にメンバーシップの有効期限が切れるメンバーを照会します。

選択 
  メール、
  プラン、
  期限切れ日、
  DATEDIFF(有効期限, '2018-07-06') 残り日数
から
  会員
どこ
  '2018-07-06' BETWEEN DATE_SUB(expired_date, INTERVAL 7 DAY) AND expired_date;

上記のクエリステートメントを実行すると、次の結果が得られます。

+--------------------------+----------+--------------+----------------+
| メール | プラン | 有効期限 | 残り日数 |
+--------------------------+----------+--------------+----------------+
| [email protected] | ゴールド | 2018-07-13 | 7 |
| [email protected] | プラチナ | 2018-07-10 | 4 |
| [email protected] | シルバー | 2018-07-08 | 2 |
+--------------------------+----------+--------------+----------------+
3行セット

上記のSQLでは、DATE_SUB関数は、間隔値(INTERVAL 7 DAY)で指定された有効期限から7日を減算します。つまり、あるデータの元の日付が13日の場合、7日を減算すると6日になります。大体こういう意味です。皆さんもある程度は理解していると思います。

今日はこれで終わりです。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL DATEDIFF 関数を使用して 2 つの日付間の時間間隔を取得する方法
  • MySQL は、現在のデータ テーブル内のすべての時間に対して指定された時間間隔を増加または減少させます (推奨)
  • MySQLのDATE_ADDとADDDATE関数は、指定された時間間隔を日付に追加します。

<<:  vue cli で env を使用するガイド

>>:  OpenSSL は双方向認証のチュートリアルを実装します (サーバーとクライアントのコード付き)

推薦する

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

Power Shell に vim 実装コード例を追加する方法

1. Vimの公式ウェブサイトにアクセスして、オペレーティングシステムに適した実行ファイルをダウンロ...

ローカルで起動したときに Vue プロジェクトがクッキーを保持できない問題を解決する

vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...

MySQLソースコマンドの使い方の紹介

目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...

Windows Server 2016 に Docker をインストールするプロセスと発生した問題

前提条件Windows Server でコンテナーを実行するには、Windows Server (半...

Zabbix による SQL Server の監視プロセスの詳細な説明

Zabbix による SQL Server の監視を見てみましょう。まずfreetdsをダウンロード...

Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)

Nginxのproxy_cacheを使用してキャッシュサーバーを構築する1: ngx_cache_...

MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続

落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...

SSMプロジェクトは、ホットデプロイメント構成を実装するためにTomcatとMavenを使用してWARパッケージとしてデプロイされることが多い。

背景ご存知のとおり、JavaEE プロジェクトを開発した後は、そのプロジェクトをサーバーの Tomc...

MySQL 8.0.22 zip圧縮パッケージ版(無料インストール)のダウンロード、インストール、および構成手順の詳細

目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...

JavaScript でよく使われる 5 つのオブジェクト

目次1. JavaScript オブジェクト1).配列オブジェクト2).ブールオブジェクト3).日付...

MySQLデータベースを操作するためのコマンドラインツールmycliの簡単な紹介

GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...

Vue における属性とプロパティの具体的な使用法と違い

目次Vue.jsにおける属性とプロパティ値および関連する処理として属性とプロパティの概念属性とプロパ...

Vue+SpringBoot+Shiroのクロスドメイン問題を解決する

目次1. Vueフロントエンドを構成する1. クロスドメイン構成を開発する2. 本番環境のクロスドメ...

CSS仕様 BEM CSSとOOCSSサンプルコード詳細説明

序文プロジェクト開発中、各人のコーディング習慣が異なるため、記述された CSS コードは十分に構造化...