MySQL DATE_FORMAT関数の使用

MySQL DATE_FORMAT関数の使用

タオバオが、ダブル11に最も多くの注文をした2人のユーザー、ユーザー1:「ショッピングの皇帝、陳哈哈」とユーザー2:「触手モンスター、劉大理」にそれぞれ10,000人民元の報酬を与えることで、ダブル12の期間中の買い物を奨励するとします。

要件 1: MySQL の注文テーブルを使用して、ダブル 11 の 1 時間ごとにこの 2 人の人が発注した注文の数をカウントするように求められます。この SQL をどのように記述しますか。

数年前に初めてMySQlに触れたとき、私は若くて軽薄だったことを覚えています。効率を考慮する必要がないことを知ったとき、24回ループするインターフェイスを作成し、24個のSQL文をチェックに送信しました(顔を覆いました)。そのインターフェイスのせいで、技術マネージャーに嘲笑されました〜〜彼は私が食べた米よりも多くのSQL文を書いたと言いました。私たち山東省人は基本的に米を食べないのですが、それでも恥ずかしいです。 。

次に、マネージャーは DATE_FORMAT 関数を呼び出してグループ クエリを処理し、すべてが正常になります。効率は私のものより数十倍高くなります。それ以来、私は密かにSQLスキルを徹底的に勉強しようと計画しました。

翌日、私は友人とキング・オブ・グローリーを2ラウンドプレイしたので、計画は数年延期されました。

MySQL には、時間フィールドを処理するための特別にカプセル化された DATE_FORMAT 関数があります。DATE_FORMAT 関数は基本的にあらゆる時間フィールドの処理要件を満たすことができると言えます。

DATE_FORMAT(日付,形式)関数

パラメータ分析:

1. date: 特定の時間フィールドを表します。または、now() を使用して現在の時刻を照会することもできます。
2. フォーマット: DATE_FORMAT は、受信した日付型データを %Y-%m-%d などの必要なフォーマットに変換します。%H:%i:%s は、受信した時刻データを "yyyy-MM-dd HH:mm:ss" フォーマットに変換します。
%Y-%m-%d %H:%i:%s は yyyy-MM-dd HH:mm:ss に対応し、最もよく使用される形式でもあります。次に簡単な例をいくつか示します。

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); -- 結果: 2020-12-07 22:18:58
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i'); -- 結果: 2020-12-07 22:18
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H'); -- 結果: 2020-12-07 22
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d'); -- 結果: 2020-12-07
SELECT DATE_FORMAT(NOW(),'%H:%i:%s'); -- 結果: 22:18:58
SELECT DATE_FORMAT(NOW(),'%H'); -- 結果: 22

上記の要件 1 の場合、DATE_FORMAT 関数を使用したクエリ方法は次のとおりです。

SELECT name を 'ユーザー名'、DATE_FORMAT(createTime,'%Y-%m-%d %H') を '時間/時間'、count(*) を '注文量' として t_order から選択します。 
 ここで、DATE_FORMAT(createTime,'%Y-%m-%d') = '2020-11-11' 
  GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H');

クエリ結果:

mysql> SELECT name as 'ユーザー名', DATE_FORMAT(createTime,'%Y-%m-%d %H') as '時間/時間', count(*) as '注文量' from t_order where DATE_FORMAT(createTime,'%Y-%m-%d') = '2020-11-11' GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H');
+------------------+---------------+-----------+
| ユーザー名| 時間| 注文量|
+------------------+---------------+-----------+
| ショッピング皇帝 陳哈哈 | 2020-11-11 00 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 01 | 10 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 02 | 6 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 03 | 3 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 04 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 05 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 06 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 07 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 08 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 09 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 10 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 11 | 0 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 12 | 12 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 13 | 6 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 14 | 3 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 15 | 7 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 16 | 2 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 17 | 3 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 18 | 11 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 19 | 2 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 20 | 1 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 21 | 3 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 22 | 2 |
| ショッピング皇帝 陳哈哈 | 2020-11-11 23 | 0 |
+------------------+---------------+-----------+
セット内の行数は 24 です (0.00 秒)

ここで、GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H') は、「年、月、日 + 時間」の組み合わせ、具体的には特定の日の時刻を表します。

もちろん、時間で区切った次の 2 つの形式でも表記できますが...:

1. GROUP BY DATE_FORMAT(createTime,'%H')
2. 時間別にグループ化(createTime)
ここで注意すべき点は、where 条件で特定の日を指定した場合、これら 3 つの関数は同じですが、where 条件で特定の日を指定しない場合は大きく異なるということです。クエリ結果を見てみましょう。

SELECT name を 'ユーザー名'、DATE_FORMAT(createTime,'%H') を '時間/時間'、count(*) を '注文量' として t_order から選択します。
 DATE_FORMAT(createTime,'%H') でグループ化します。

クエリ結果

mysql> SELECT name as 'ユーザー名', DATE_FORMAT(createTime,'%H') as '時間/時間', count(*) as '注文量' from t_order GROUP BY DATE_FORMAT(createTime,'%H');
+-----------------+---------------+-----------+
| ユーザー名| 時間| 注文量|
+-----------------+---------------+-----------+
| 触手モンスター 劉ダリ | 00 | 11 |
| 触手モンスター 劉ダリ | 01 | 302 |
| 触手モンスター 劉大理 | 02 | 277 |
| 触手モンスター 劉大理 | 03 | 122 |
| 触手モンスター 劉ダリ | 04 | 6 |
| 触手モンスター 劉ダリ | 05 | 11 |
| 触手モンスター 劉ダリ | 06 | 0 |
| 触手モンスター 劉ダリ | 07 | 0 |
| 触手モンスター 劉ダリ | 08 | 1 |
| 触手モンスター 劉ダリ | 09 | 4 |
| 触手モンスター 劉大理 | 10 | 5 |
| 触手モンスター 劉大理 | 11 | 92 |
| 触手怪人 劉大理 | 12 | 1937 |
| 触手モンスター 劉大理 | 13 | 1602 |
| 触手モンスター 劉大理 | 14 | 108 |
| 触手モンスター 劉大理 | 15 | 78 |
| 触手モンスター 劉大理 | 16 | 110 |
| 触手モンスター 劉大理 | 17 | 108 |
| 触手モンスター 劉大理 | 18 | 138 |
| 触手モンスター 劉大理 | 19 | 66 |
| 触手モンスター 劉大理 | 20 | 44 |
| 触手モンスター 劉大理 | 21 | 59 |
| 触手モンスター 劉大理 | 22 | 21 |
| 触手モンスター 劉大理 | 23 | 8 |
+-----------------+---------------+-----------+
セット内の行数は 24 行 (0.01 秒)

クエリ結果から、見つかったデータは各時間におけるすべてのユーザーの過去の注文の分布であることがわかります。DATE_FORMAT(createTime,'%H') は任意の日の時刻を表し、GROUP BY HOUR(createTime) と同等です。

これらのデータがあれば、推奨アルゴリズムを作成する学生は、「触手怪人 劉大理」への広告宣伝にどの期間が最も効果的かを知ることができると思います。

MySQL DATE_FORMAT 関数の使用に関するこの記事はこれで終わりです。MySQL DATE_FORMAT に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの共通関数を使用してJSONを処理する方法
  • MySQLプロセス関数の一般的な使用例の分析
  • MySQL の PHP 操作における mysql_fetch_* 関数の一般的な使用方法のチュートリアル
  • Mysql関数呼び出しの最適化の詳細な説明
  • MySQL で sum 関数を使用する例のチュートリアル
  • MySQLセグメンテーション関数substring()の具体的な使用法
  • MySQLの基本の共通機能

<<:  Vue3のいくつかの利点についての簡単な説明

>>:  英語: リンクタグはIEでhrefを自動的に補完します

推薦する

CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

成し遂げるこの効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた...

HTML テーブル セルの幅と高さを設定する方法

Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...

HTML のインラインブロックの空白を素早く削除する 5 つの方法

inline-block プロパティ値は、「インライン」要素のマージンとパディングを制御する必要があ...

よく使用される入力テキストボックスの内容は自動的に垂直方向に中央揃えされ、クリックするとデフォルトのプロンプトテキストは空になります。

3つの機能: 1. コンテンツの垂直方向の自動中央揃え2. デフォルトのプロンプトテキストは灰色で表...

クリックして展開し、全文を読む機能を実現する純粋なCSS

注記記事表示リストインターフェースを開発する場合、情報の基本的な概要を提供するために記事ヘッダーコン...

Linux DMAインターフェースの知識ポイントの詳細な説明

1. 2種類のDMAマッピング1.1. 一貫性のあるDMAマッピング主に長期間使用されるエリアをマッ...

MySQLアラームの詳細な分析と処理

最近、あるサービスにアラームが発生し、耐えられなくなっています。アラーム情報は次のとおりです。メトリ...

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

実用的なクイックスタートReactルーティング開発

インストールインストールするには、次のコマンドを入力します。 // ネプ npm で react-r...

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

js 配列 fill() 充填メソッド

目次1. fill() 構文2. fill() の使用3. まとめ序文:配列の初期化方法についてはよ...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

トークン生成と検証を実装するミニプログラム

目次プロセスデモミニプログラムバックエンドインターフェースプロセス各リクエストインターフェースは検証...

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

Docker を使用した ELK7.3.0 ログ収集サービスの導入に関するベスト プラクティス

最初に書くこの記事では、ELK 7.3.0 の展開についてのみ説明します。展開環境:システムセントO...