Heim  >  Artikel  >  Datenbank  >  MySQL-Abfragedatenmethode „Heute“, „Gestern“, „Letzte 7 Tage“, „Letzte 30 Tage“, „Dieser Monat“, „Letzter Monat“.

MySQL-Abfragedatenmethode „Heute“, „Gestern“, „Letzte 7 Tage“, „Letzte 30 Tage“, „Dieser Monat“, „Letzter Monat“.

大家讲道理
大家讲道理Original
2016-11-12 10:47:092128Durchsuche

Es wird gesagt, dass es einen Artikeltabellenartikel gibt, der im Feld add_time gespeichert ist. Dieses Feld ist vom Typ int(5). Jetzt müssen wir die Gesamtzahl der heute hinzugefügten Artikel abfragen und sie sortieren Die Abfrageanweisung lautet wie folgt:

  SELECT * FROM `article` where date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');
oder:
    SELECT * FROM `article` where to_days(date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d')) = to_days(now());
Unter der Annahme, dass der Speichertyp des Felds add_time in der obigen Tabelle der Typ DATETIME oder TIMESTAMP ist, kann die Abfrageanweisung dies tun kann auch wie folgt geschrieben werden:
Informationsdatensatz von heute abfragen:
    SELECT * FROM `article` where to_days(`add_time`) = to_days(now());

Informationsdatensatz von gestern abfragen:
   SELECT * FROM `article` where to_days(now()) – to_days(`add_time`) <= 1;

Informationsdatensätze der letzten 7 Tage abfragen:
  SELECT * FROM `article` where date_sub(curdate(), INTERVAL 7 DAY) <= date(`add_time`);

Informationsdatensätze der letzten 30 Tage abfragen:
    SELECT * FROM `article` where date_sub(curdate(), INTERVAL 30 DAY) <= date(`add_time`);

Informationsdatensätze dieses Monats abfragen:
    SELECT * FROM `article` where date_format(`add_time`, ‘%Y%m&#39;) = date_format(curdate() , ‘%Y%m&#39;);

Informationsdatensätze des Vormonats abfragen:

SELECT * FROM `article` where period_diff(date_format(now() , ‘%Y%m&#39;) , date_format(`add_time`, ‘%Y%m&#39;)) =1;
Analysieren Sie mehrere Funktionen in der obigen SQL-Anweisung:

(1) to_days

Genau wie sein Name konvertiert es eine bestimmte Datums- oder Zeitzeichenfolge in den Unix-Zeitstempel, der einem bestimmten Tag entspricht, z als:
 
   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 |
   +--------------------------------+
Es ist ersichtlich, dass der Unterschied zwischen dem 22. und dem 23. darin besteht, dass sich die Zahl nach der Konvertierung um 1 erhöht hat. Diese granulare Abfrage ist relativ grob und erfüllt manchmal möglicherweise nicht unsere Abfrageanforderungen, daher müssen wir sie verwenden Feinkörnige Abfragemethode str_to_date-Funktion, die Verwendung dieser Funktion wird unten analysiert.

Erinnerung:

(1) to_days() wird nicht für Werte vor dem Aufkommen des Sonnenkalenders (1582) verwendet. Der Grund dafür ist, dass bei einer Änderung des Kalenders die Daten fehlen werden nicht berücksichtigt. Daher sind die Ergebnisse dieser Funktion für Daten vor 1582 (oder vielleicht für das nächste Jahr in anderen Regionen) unzuverlässig.

(2) Die Regel in MySQL „Datums- und Zeittyp“ besteht darin, den zweistelligen Jahreswert im Datum in vier Ziffern umzuwandeln. Daher werden „1997-10-07“ und „97-10-07“ als dasselbe Datum betrachtet:
   mysql> select to_days(&#39;1997-10-07&#39;), to_days(&#39;97-10-07&#39;);
     
    -> 729669, 729669
(2) str_to_date

Diese Funktion kann die Zeichenfolge „Time Translated“ vollständig konvertieren , wie zum Beispiel:
 
    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                                    |
  +--------------------------------------------------------+
Die spezifische Falloperation ist wie folgt:

select str_to_date(article.`add_time`,&#39;%Y-%m-%d %H:%i:%s&#39;)
   from article
    where str_to_date(article.`add_time`,&#39;%Y-%m-%d %H:%i:%s&#39;)>=&#39;2012-06-28 08:00:00&#39; and str_to_date(article.`add_time`,&#39;%Y-%m-%d %H:%i:%s&#39;)<=&#39;2012-06-28 09:59:59&#39;;

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn