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.

n00b
quelle

Antworten:

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

Aber ich denke du meinst created < today

Clodoaldo Neto
quelle
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

Edmhs
quelle
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.

Shakti Singh
quelle
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'

Bart
quelle
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;
JeffMan
quelle
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')
Bsienn
quelle
2
SELECT * FROM users WHERE created >= now()
Silx
quelle
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
Rob Fahndrich
quelle
-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"]

vpgodara
quelle
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";    
}
Koney L Visinko
quelle
4
Dies ist sehr langsam im Vergleich zur Datenbankauswahl
IgniteCoders