web-dev-qa-db-fra.com

Sélection d'entrées par date -> = NOW (), MySQL

J'ai un tableau du calendrier des événements et j'aimerais sélectionner des événements avec des dates égales ou supérieures à celles d'aujourd'hui. Lorsque j'utilise l'instruction SELECT suivante, elle ne récupère que les événements futurs (> NOW ()):

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

Comment pourrais-je choisir tous les événements d'aujourd'hui ou à venir?

Je vous remercie

25
NightMICU

Vous recherchez CURDATE() :

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

Ou:

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

La raison pour laquelle cette requête: 

SELECT * FROM events WHERE event_date >= NOW()

... renvoie des enregistrements du futur, car NOW () inclut l'heure ainsi que la date. Et cette partie heure indique l'heure à laquelle l'instruction [fonction ou déclencheur] a commencé à s'exécuter. Cela signifie donc que le début de la journée dans un type de données DATETIME ressemble à: 2010-06-24 00:00:00 (AAAA-MM-JJ HH: MM: SS, à la précision microseconde), ce que NOW () afficherait comme suit: 2010-06-24 14:24:31...

Voici vos options:

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()
13
OMG Ponies

Tu pourrais aussi faire

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

Ce qui est plus précis que d’utiliser CURTIME () si par hasard votre temps d’utilisation ainsi que la date

2
Akshat

Si vous vous souciez seulement de la date, pas de l'heure, utilisez CURDATE () au lieu de NOW().

Bien sûr, vous pouvez également utiliser le synonyme CURRENT_DATE (avec ou sans parenthèses après celui-ci), mais la documentation que j'ai indiquée donne CURDATE comme première orthographe ;-).

1
Alex Martelli

Votre problème est que now () est très précis. Donc, les dates pour aujourd'hui et pour aujourd'hui parce qu'elles ont commencé au début de la journée.

Utilisez ceci:

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

Voici la différence entre CURDATE et 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)

J'utilise toujours MAINTENANT juste pour être précis

0
Kolob Canyon