Wie subtrahiere ich 30 Tage von der aktuellen Datums- / Uhrzeitangabe in MySQL?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/de/date-and-time-functions.html#function_date-add
Für alle, die nicht verwenden möchten DATE_SUB
, verwenden Sie CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY
. Da in der Frage "30 Tage vom aktuellen Datum abziehen " erwähnt wird, ist dies möglicherweise nicht das, was das OP wünscht.current_timestamp
anstelle voncurrent_date
Lassen Sie uns nicht verwenden,
NOW()
da Sie das Zwischenspeichern oder Optimieren von Abfragen verlieren, da die Abfrage jedes Mal anders ist. Siehe die Liste der Funktionen, die Sie nicht verwenden sollten, in der MySQL-Dokumentation .Nehmen wir im folgenden Code an, dass diese Tabelle mit der Zeit wächst. Es werden neue Inhalte hinzugefügt, und Sie möchten nur die Inhalte der letzten 30 Tage anzeigen. Dies ist der häufigste Fall.
Beachten Sie, dass das Datum als Zeichenfolge hinzugefügt wurde. Es ist besser, das Datum auf diese Weise aus Ihrem Aufrufcode hinzuzufügen, als die
NOW()
Funktion zu verwenden, da sie das Caching beendet.Sie können es verwenden,
BETWEEN
wenn Sie wirklich nur Dinge von dieser Sekunde bis 30 Tage vor dieser Sekunde wollen, aber dies ist meiner Erfahrung nach kein häufiger Anwendungsfall, daher hoffe ich, dass die vereinfachte Abfrage Ihnen gute Dienste leisten kann.quelle
NOW()
und sie dennoch in Ihrer Antwort zu verwenden. o_O PS: Ihre Anfrage würde ein anderes Ergebnis zurückgeben, nicht das, was OP wahrscheinlich willBETWEEN
und>=
sind verschiedene Operatoren, weißt du? Meine Abfrage begrenzt die Ergebnismenge30 days ago AND today
dafüreverything after 30 days ago
. Dietomorrow
Datensätze stimmen also nicht mit meinen und Ihrer ursprünglichen Abfrage überein, sondern mit dieser AntwortMySQL subtrahiert Tage von jetzt an:
Drucke:
Andere Argumente der Intervall Temporal Expression Unit:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
quelle
Sie können auch verwenden
quelle
Sie können mithilfe des Datumsformats in SQL formatieren.
quelle
ein anderer Weg
quelle
Wenn Sie nur das Datum und nicht die Uhrzeit benötigen, verwenden Sie:
Da die
curdate()
Zeitkomponente weggelassen wird, ist sie möglicherweise schnellernow()
und "semantisch korrekter", wenn Sie nur am Datum interessiert sind.Außerdem ist
subdate()
die 2-Arity-Überlastung möglicherweise schneller als die Verwendunginterval
.interval
ist für Fälle gedacht, in denen Sie eine Nicht-Tageskomponente benötigen.quelle
subdate(curdate(), 30)
sei schneller alsCURRENT_DATE - INTERVAL 30 DAY
? Hast du Beweise? Und wie schnell wäre das? Ein paar Mikrosekunden?subdate
, dass es Ihrer Meinung nach wahrscheinlich schneller durch seine "2-Arity-Überlastung" erklärt wird, potenziell schneller zu sein, aber bitte verzeihen Sie mir, wenn dies eine dumme Frage ist, was bedeuten diese Wörter (in Bezug auf eine Funktion) )? Was ist insbesondere "2-Arität"?curdate()
könnte dies tatsächlich die falsche Wahl sein, da das OP anscheinend "30 Tage von der aktuellen Datumszeit abziehen " wollte (Hervorhebung von mir).