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

推薦する

新しい CSS :where および :is 疑似クラス関数とは何ですか?

:is と :where とは何ですか? :is()と:where()は、セレクターを作成するとき...

JSはreduce()メソッドを使用してツリー構造データを処理します

目次意味文法例1. 初期値initが渡されない2. 初期値を渡す場合3. アレイの重複排除4. Re...

フィールドを結合するSQL関数

最近、関連テーブル内のすべてのフィールドをクエリし、それらを 1 つのフィールドに再グループ化する必...

Angular の 12 の典型的な問題について簡単に説明します

目次1. Angular 2 アプリケーションのライフサイクル フックとは何ですか? 2. Angu...

NavicatがLinuxサーバー上のMySQLに接続できない問題を解決する

最初は悲しい気持ちになりました。スクリーンショットは以下の通りです。 少し苦労しましたが、解決策は次...

Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

1.まずnpmをアンインストールする sudo npm アンインストール npm -g 2. ノー...

主キーを追加または変更するMySQL SQL文操作

テーブルフィールドを追加する テーブルtable1を変更し、トランザクタvarchar(10)をNu...

よく使われるn番目の子セレクターをまとめる

序文フロントエンドプログラミングでは、奇数、偶数などの数値を受け入れることができる nth-chil...

Linux でパスワードの有効期限を表示および設定する方法

適切な設定を行うことで、Linux ユーザーにパスワードを定期的に変更させることができます。パスワー...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

Apache Webサーバーのインストールと設定方法

信頼性が高く、人気があり、簡単に構成できる Web サーバーである Apache で独自の Web ...

最初のReactページを作成する方法

目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...

Docker を使用して ELK ログ システムを構築する例

以下のインストールではすべて、インストール ルート ディレクトリとして ~/ ディレクトリが使用され...

Linux での SSH 非秘密通信の実装

SSHとは何か管理者はリモートでログインして、インターネット経由で接続されたさまざまな場所にある複数...

CSS で画像アダプティブ コンテナを実装するいくつかの方法 (要約)

多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...