2010-06-25 23 views
23

Ich habe eine Tabelle mit Veranstaltungskalendern und möchte Ereignisse mit gleichen oder größeren Daten als heute auswählen. Wenn ich die folgende SELECT-Anweisung verwenden, es ruft nur Ereignisse in der Zukunft (> NOW()):Einträge nach Datum auswählen -> = NOW(), MySQL

<?php  
$db->query("SELECT * FROM events WHERE event_date >= NOW()"); 
?> 

Wie würde ich über die Auswahl für alle Veranstaltungen gehen, die entweder heute oder in der Zukunft?

Danke

Antwort

36

Sie suchen CURDATE() suchen:

$db->query("SELECT * FROM events WHERE event_date >= CURDATE()"); 

Oder:

$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()"); 
+0

Dank sein! Arbeitete wie ein Charme – NightMICU

+0

@NightMICU: Das ist toll :) – Sarfraz

+0

Gute Antwort, aber es ist nur Zeit und kein Datum zu überprüfen! –

1

Wenn Sie nur über das Datum kümmern, nicht die Zeit, verwenden CURDATE() statt NOW().

Natürlich können Sie alternativ das Synonym CURRENT_DATE (mit oder ohne Klammern danach) verwenden, aber die Dokumente, auf die ich zeigte, geben CURDATE als erste Schreibweise ;-).

0

Ihr Problem ist, dass jetzt() ist sehr genau. Also Termine für heute und früher, denn sie haben am Anfang des Tages begonnen. diese

Verwendung:

select * from events where datediff(event_date, now()) >= 0; 
12

Der Grund, dass diese Abfrage:

SELECT * FROM events WHERE event_date >= NOW() 

... Datensätze aus der Zukunft zurückkehrt, liegt daran, dass NOW() die Zeit sowie das Datum enthält. Und dieser Zeitabschnitt gibt die Zeit an, zu der die [Funktion oder auslösende] Anweisung zu laufen begann. So bedeutet, dass der Beginn des Tages in Datumsdatentyp wie folgt aussieht: 2010-06-24 00:00:00 (YYYY-MM-DD HH: MM: SS, bis Mikro Präzision), die jetzt() so etwas wie 2010-06-24 14:24:31 zeigen würde ...

hier sind Ihre Möglichkeiten:

SELECT * FROM events WHERE event_date >= DATE(NOW()) 
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP) 
SELECT * FROM events WHERE event_date >= CURRENT_DATE() 
SELECT * FROM events WHERE event_date >= CURRDATE() 
+0

Sehr ausführliche Antwort, danke! Sehr nützlich für die Zukunft – NightMICU

2

Sie auch

tun können
<?php  
$db->query("SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) >=  UNIX_TIMESTAMP(NOW())"); 
?> 

, die genauer als die Verwendung von CURTIME ist(), wenn durch Zufall Ihrer Zeit sowie Datum mit

0

Hier ist der Unterschied zwischen CURDATE und NOW:

mysql> select CURDATE(); 
+------------+ 
| CURDATE() | 
+------------+ 
| 2017-03-17 | 
+------------+ 
1 row in set (0.03 sec) 

mysql> select NOW(); 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2017-03-17 09:04:45 | 
+---------------------+ 
1 row in set (0.00 sec) 

ich gerade jetzt immer verwenden genaue

Verwandte Themen