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 によってプルされたイメージがどこに保存されるかの詳細な説明

推薦する

MySQL 文字セットの文字化けとその解決方法

序文文字セットは、一連のシンボルとエンコード規則です。Oracle データベースでも MySQL デ...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

MySQLが日付フィールドインデックスを使用しない理由の要約

目次背景探検する要約する背景テーブルでは、dataTime フィールドは varchar 型に設定さ...

解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です

1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...

JS で列挙をシミュレートする方法

序文現在の JavaScript には列挙の概念がありません。一部のシナリオでは、列挙を使用するとデ...

JSを使用して画像を効果的に圧縮する方法

目次序文変換関係具体的な実装file2DataUrl(ファイル、コールバック) file2Image...

実用的な MySQL + PostgreSQL バッチ挿入更新 insertOrUpdate

目次1. 百度百科事典1. MySQL 2. PostgreSQL 3. MySQL に対する Po...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

JSインターセプト文字列の3つの方法の詳細な説明

JS には、文字列をインターセプトするための 3 つのメソッド、 slice() 、 substri...

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...

デザイナーはコーディングを学ぶ必要がありますか?

多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...

Dockerバッチコンテナオーケストレーションの実装

導入Dockerfile ビルドの実行は、単一のコンテナの手動操作です。マイクロサービス アーキテク...

SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数...

Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)

目次JDKをダウンロードしてインストールするTomcat 圧縮パッケージをダウンロードTomcatの...