MySQLで時間を判定条件として使用する方法

MySQLで時間を判定条件として使用する方法

背景: 開発プロセスでは、現在の月、現在の日、現在の時間、今後数日など、時間を判断条件としてデータをクエリする必要があることがよくあります。

1. 現在の月

これを実現するには、MySQL MONTH(date) 関数を使用するだけです。 (年をメモしてください)

MONTH(日付);
-- 使用法: MONTH 関数は、指定された日付値の月を表す整数を返します。

- 例
月を選択('2020-11-11 00:00:00')
-- 戻り値は11です

2. 30日以内

当月の後に「30日以内」と付けたのは、この2つの要件が相互に変換される状況に遭遇することが多いためです。「30日以内」は「1ヶ月以内」とも呼ばれます。

この場合、DATEDIFF(expr1,expr2) 関数を使用する必要があります。

DATEDIFF(式1,式2)
-- 使用法: パラメーターは 2 つの日付であり、expr1 と expr2 の間の日数の差が返されます。

- 例
DATEDIFF('2020-11-01 08:00:00','2020-11-11 00:00:00') を選択します
-- 戻り値は-10です

3. 当日

現在の日付には TO_DAYS(date) 関数を使用する必要があります。

TO_DAYS(日付)
-- 使用法: 0000 (西暦 1 年) から現在の日付までの合計日数を返します。

- 例
TO_DAYS('0000-01-01')を選択します
-- 戻り値は1です
TO_DAYS('0001-01-01')を選択します
-- 戻り値は366です

4. 現在の時間

この場合、HOUR(date) 関数と CURDATE() 関数を一緒に使用する必要があります。

HOUR(日付)
-- 使用法: 現在の時刻を今日の時間として返します
- 例
時間を選択('2020-11-11 11:11:11')
-- 戻り値は11です

CURDATE()
-- 使用法: 時間、分、秒を除いた今日の日付を yyyy-MM-dd で返します。

-- 使用例
created_at > CURDATE() かつ HOUR(created_at) = HOUR(now()) となるテーブルから * を選択します

5. x日以内

これは、DATE_SUB(date,INTERVAL expr unit) 関数を使用して実現できます。

DATE_SUB(日付,INTERVAL 式 単位)
-- 使用法: 開始日から期間を引いた値

次の表に示すように、その背後にある単位には多くの値があります。

タイプ(単位値)意味expr式の形式は
ええ
MM
DD
時間時間はあ
ポイントんん
2番2番ss
年_月年と月YYとMMは任意の記号で区切られます
曜日_時間日と時間DDとhhは任意の記号で区切られます
日_分日と分DDとmmは任意の記号で区切られます
DAY_SECOND日と秒DDとssは任意の記号で区切られます
時間_分時間と分hhとmmを区切るには任意の記号を使用します
時間_秒時間と秒hhとssを区切るには任意の記号を使用します
分_秒分と秒mmとssを区切るには任意の記号を使用します

- 例
-- 7日以内にデータクエリ
created_at > DATE_SUB(CURDATE(),INTERVAL 7 DAY) のテーブルから * を選択

6. 数日以内にデータ統計

7 日間で毎日のデータ量をカウントするという要件によく遭遇します。この場合、データのプッシュがない場合、つまり 0 であっても取得する必要がある場合を考慮する必要があります。

私の考えは次のとおりです。

選択
	 DATE_SUB( CURDATE(), INTERVAL ミリ秒 日 ) AS orderDate
から
	(
  0 を s として選択 UNION ALL
  1つを選択 すべてを選択
  2 を選択 すべて結合
  3 を選択 すべて結合
  選択 4 ユニオン すべて
  5 を選択 すべて
  選択6 
	)

上記のSQLクエリ結果を一時テーブルとして使用し、データテーブルと照合して、一定期間内のデータ数をカウントします。

-- 例: 12か月以内の各月のデータ数を照会する SELECT COUNT(t.created_at),res.date FROM 
	(選択
	 DATE_FORMAT(DATE_SUB( CURDATE(), INTERVAL ms MONTH ),'%Y-%m') AS 日付
から
	(
  0 を s として選択 UNION ALL
  1 を選択 すべてを選択
  2 を選択 すべて結合
  3 を選択 すべて結合
  選択 4 ユニオン すべて
  5 を選択 すべて
  6 を選択 すべて
  7 を選択 すべて
  8 ユニオン すべてを選択
  選択 9 ユニオン すべて
  10 を選択 すべて
  選択11 
	) m)res
	左結合 
	テーブル t on res.date = DATE_FORMAT(t.created_at,'%Y-%m')
	日付別にグループ化

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mysql 文字列フィールドに特定の文字列が含まれているかどうかを判断する 2 つの方法
  • MySQLが正常にインストールされたかどうかを確認する方法
  • MySQLに挿入する前にデータが存在するかどうかを確認する方法

<<:  建国記念日が近づいています。JS を使用して、建国記念日風のアバターを生成する小さなツールを実装します。実装プロセスの詳細な説明

>>:  docker によってプルされたイメージがどこに保存されるかの詳細な説明

推薦する

Vue で HTML 5 ドラッグ アンド ドロップ API を使用する方法

ドラッグ アンド ドロップ API は、ドラッグ可能な要素を HTML に追加し、ドラッグ可能な豊富...

ES6分解課題の原理と応用

目次配列分割代入オブジェクトの分解代入分割割り当ての適用変数の値の交換関数から複数の値を返すマップ構...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

ネイティブ JS カプセル化 vue タブ切り替え効果

この記事の例では、ネイティブJSカプセル化vueタブ切り替えの具体的なコードを参考までに共有していま...

Nginx try_files ディレクティブの使用例

Nginx の設定構文は柔軟で、高度に制御可能です。バージョン 0.7 以降では、try_files...

MySQL での置換例の詳細な説明

MySQL での置換例の詳細な説明replace into は insert と似ていますが、rep...

Ubuntu の仮想環境に Django をインストールする方法

Ubuntu コマンドライン ウィンドウで次の操作を実行します。 1. 仮想環境をインストールする...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

Vue nextTickの原理の分析

目次イベントループmiscroTask (マイクロタスク) UI レンダリング (重要なポイント)次...

vsFTP 3.0.3 のコンパイルとインストールの詳細な分析

脆弱性の詳細VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される...

効果的なウェブフォームのための 8 つのルール

ユーザーから情報を収集する場合、Web フォームを使用するより簡単で直接的な方法はありません。適切に...

XHTML 入門チュートリアル: XHTML ハイパーリンク

ハイパーリンクはインターネット全体を接続していると言っても過言ではありません。ハイパーリンクは、別の...

Dockerコンテナでユーザーを分離する方法

前回の記事「Docker コンテナの UID と GID を理解する」では、Docker コンテナ内...

ドラッグ効果を実現するための純粋なCSSコード

目次1. ドラッグ効果の例2. CSS実装の原則3. CSS実装の詳細4. CSSレイアウト1. 固...

Docker で Java 8 Spring Boot アプリケーションを開発する方法

この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...