MySQL クエリの今日、昨日、過去 7 日間、過去 30 日間、今月、先月のデータ メソッド

大家讲道理
リリース: 2016-11-12 10:47:09
オリジナル
2129 人が閲覧しました

記事テーブルの記事があり、このフィールドは int(5) 型です。ここで、今日追加された記事の合計数を時間順に並べ替える必要があります。クエリ文は次のようになります:

  SELECT * FROM `article` where date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');
ログイン後にコピー
または:
    SELECT * FROM `article` where to_days(date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d')) = to_days(now());
ログイン後にコピー
上記のテーブルの add_time フィールドの格納型が DATETIME 型または TIMESTAMP 型であると仮定すると、クエリ文は次のように記述することもできます:
今日の情報レコードをクエリする:
    SELECT * FROM `article` where to_days(`add_time`) = to_days(now());
ログイン後にコピー

昨日の情報レコードをクエリする:
   SELECT * FROM `article` where to_days(now()) – to_days(`add_time`) <= 1;
ログイン後にコピー

最近の情報レコードをクエリする 7 日間の情報レコードをクエリする:
  SELECT * FROM `article` where date_sub(curdate(), INTERVAL 7 DAY) <= date(`add_time`);
ログイン後にコピー

過去 30 日間の情報レコードをクエリする:
    SELECT * FROM `article` where date_sub(curdate(), INTERVAL 30 DAY) <= date(`add_time`);
ログイン後にコピー

今月の情報レコードをクエリする:
    SELECT * FROM `article` where date_format(`add_time`, ‘%Y%m&#39;) = date_format(curdate() , ‘%Y%m&#39;);
ログイン後にコピー

情報をクエリする前月の記録:

SELECT * FROM `article` where period_diff(date_format(now() , ‘%Y%m&#39;) , date_format(`add_time`, ‘%Y%m&#39;)) =1;
ログイン後にコピー
は上記の SQL ステートメントのいくつかに興味があります。関数の分析を行ってみましょう:

(1) to_days

その名前のように、特定の日付または時刻の文字列を UNIX に変換します。特定の日に対応するタイムスタンプ。例:
 
   mysql> select  to_days(&#39;2010-11-22 14:39:51&#39;);      
   +--------------------------------+                                                        
   | to_days(&#39;2010-11-22 14:39:51&#39;) |
  +--------------------------------+
   |                         734463 |
   +--------------------------------+
   
   mysql> select  to_days(&#39;2010-11-23 14:39:51&#39;);
   +--------------------------------+
  | to_days(&#39;2010-11-23 14:39:51&#39;) |
  +--------------------------------+
   |                         734464 |
   +--------------------------------+
ログイン後にコピー
では 22 が表示されます。その日と 23 日の違いは、変換後の数値が 1 増加していることです。この詳細なクエリは比較的大まかで、クエリ要件を満たさない場合があります。詳細なクエリ メソッド str_to_date 関数を使用する必要があります。この関数の使用法については後で説明します。

注意:

(1) to_days() は、太陽暦の出現 (1582 年) より前の値には使用されません。その理由は、暦が変更されると、欠落している日付が考慮されないためです。したがって、この関数の結果は、1582 年より前の日付 (他の地域ではおそらく翌年) については信頼できません。

(2) MySQL の「日付と時刻の型」のルールは、日付の 2 桁の年の値を 4 桁に変換することです。したがって、「1997-10-07」と「97-10-07」は同じ日付とみなされます:
   mysql> select to_days(&#39;1997-10-07&#39;), to_days(&#39;97-10-07&#39;);
     
    -> 729669, 729669
ログイン後にコピー
(2) str_to_date

この関数は、次のような文字列時刻を完全に変換できます:
 
    mysql> select str_to_date("2010-11-23 14:39:51",&#39;%Y-%m-%d %H:%i:%s&#39;);
    
    +--------------------------------------------------------+
    | str_to_date("2010-11-23 14:39:51",&#39;%Y-%m-%d %H:%i:%s&#39;) |
    +--------------------------------------------------------+
   | 2010-11-23 14:39:51                                    |
  +--------------------------------------------------------+
ログイン後にコピー
の特定のケースは次のとおりです。 :

りー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート