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 は双方向認証のチュートリアルを実装します (サーバーとクライアントのコード付き)

推薦する

Vue はスクロール可能なポップアップウィンドウ効果を実装します

この記事では、スクロール可能なポップアップウィンドウ効果を実現するためのVueの具体的なコードを参考...

Windows の MySQL net start mysql MySQL サービスの起動エラーが発生する システムエラーの解決

目次1- エラーの詳細2-シングルソリューション2.1-ディレクトリ C:\Windows\Syst...

一般的な Nginx のテクニックと例の概要

1. 複数サーバーの優先順位たとえば、各サーバー ブロックがポート 80 をリッスンする場合、www...

HTML タイトルに二重引用符を追加する方法

<a href="https://www.jb51.net/" title...

ウェブサイトに天気予報を挿入する方法

天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...

燃える炎効果の英語フォント16種類をシェアする

私たちは視覚の世界に住んでおり、多くの視覚効果に囲まれています。コンピューターの前にいても、屋外にい...

フォーム入力ボックスに関するWebデザインのヒント

1. キャンセル ボタンが押されたときの破線ボックス<br /> 入力に属性値 hide...

Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析

<br />関連記事: Facebookの情報アーキテクチャの分析 元記事: http:...

Reactは二次連結(左右連結)を実現する

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...

HTML テーブル マークアップ チュートリアル (30): セルの暗い境界線の色属性 BORDERCOLORDARK

セルでは、暗い境界線の色を個別に定義できます。基本的な構文<TD ボーダーコロダーク=colo...

ハイパーリンクの幅と高さを直接設定できない問題の解決策

幅と高さを直接使用することはできません。 display:block; または display:in...

Nginx の起動に失敗した場合のいくつかのエラー処理の詳細な説明

Nginx を Web サーバーとして使用する際に、次の問題が発生しました。 1. nginxの起動...

Docker が占有するディスク領域をクリーンアップする方法

Docker は多くのスペースを占有します。コンテナを実行したり、イメージを取得したり、アプリケー...

MySQLデータベースとOracleデータベース間のバックアップをインポートする

OracleデータベースからエクスポートされたデータをMySqlデータベースにインポートします。 1...

CSS の vertical-align プロパティとベースラインの問題に関する深い理解

vertical-align属性は、主にインライン要素の配置を変更するために使用されます。インライン...