Datetime gleich oder größer als heute in MySQL


175

Was ist der beste Weg, um Folgendes zu tun:

SELECT * FROM users WHERE created >= today;

Hinweis: Erstellt ist ein Datum / Uhrzeit-Feld.

Antworten:


329
SELECT * FROM users WHERE created >= CURDATE();

Aber ich denke du meinst created < today


11
CURDATE()Rückkehr nur Datum nicht Zeit
Shakti Singh

20
@ n00b Wie haben Sie Benutzer, die in der Zukunft erstellt werden ..? interessant =) Ich habe dies verwendet, um zu sehen, ob ein Beitrag noch abgelaufen ist.
Garet Claborn

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

Lesen Sie mehr: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html


6
Vielleicht fehlt mir etwas, aber bei DATETIME-Typen funktioniert die CURDATE () -Lösung nicht. Das macht.
Jahmic

Außerdem nimmt dies viel Zeit in Anspruch, da die Konvertierung von DATETIME in das Datum über die Funktion DATE () und der anschließende Vergleich mit der where-Bedingung viel Aufwand bedeutet.
Roopunk

Verwenden Sie keine Funktionen für Spalten, da die Abfrage den Index ignoriert und langsame Abfragen verursacht. Überprüfen Sie meine Antwort für alternativen Ansatz stackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

Wenn die Spalte vom Typ datetime ist.


1
Ich meine heute nicht jetzt: D Ich brauche heute wie 2011-03-03 nicht 2011-03-03 14:02:02
n00b

@ n00b: Es werden Zeilen zurückgegeben, die größer als heute sind.
Shakti Singh

3
Nehmen wir an, es ist 2011-02-02 14:02:02 - Benutzer, die um 10:02:02 erstellt wurden, würden in Ihrer Version nicht zurückgegeben, obwohl sie "heute" erstellt wurden :)
n00b

@ n00b: Lol ya, es würden niemals Benutzer zurückgegeben, wenn wir nur die Zeit anhalten könnten.
Mike Purcell

15

Wenn 'Erstellt' Datums- / Uhrzeittyp ist

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE () bedeutet auch '2013-05-09 00:00:00'


Danke dafür. Ich brauchte tatsächlich DATE_SUB (auf die gleiche Weise verwendet), aber das brachte mich auf den richtigen Weg.
Daniel Price

Dies gibt keine Daten zurück, bei denen das Datum 0s in der Zeit enthält, dh '2013-05-09 00:00:00' wird verpasst
Bsienn

8

Die markierte Antwort ist irreführend. Die gestellte Frage ist DateTime, aber angegeben, was gebraucht wurde, war gerecht CURDATE().

Die kürzeste und richtige Antwort darauf lautet:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

Wenn die Spalte einen Index hat und eine Funktion auf die Spalte angewendet wird, funktioniert der Index nicht und es erfolgt ein vollständiger Tabellenscan, was zu einer sehr langsamen Abfrage führt.

Um den Index zu verwenden und Datum und Uhrzeit mit dem heutigen / aktuellen Datum zu vergleichen, kann Folgendes verwendet werden.

Lösung für OP:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

Beispiel, um Daten für heute zu erhalten:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

Oder verwenden Sie ZWISCHEN kurz

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

Dies wird die Aufzeichnungen nicht vor diesem Moment von heute zurückgeben.
gsziszi

0

Der folgende Code hat bei mir funktioniert.

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date ["05/11/2011"]


Dies ist eine sehr rohe Lösung
IgniteCoders

-5

Sie können alle Zeilen zurückgeben und dann die PHP-Datediff-Funktion in einer if-Anweisung verwenden, obwohl dies den Server zusätzlich belastet.

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
Dies ist sehr langsam im Vergleich zur Datenbankauswahl
IgniteCoders
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.