2010-06-25 24 views
23

Tengo una tabla de Calendario de eventos y me gustaría seleccionar eventos con fechas iguales o mayores que las actuales. Cuando uso la siguiente instrucción SELECT, sólo se recupera eventos en el futuro (> NOW()):Selección de entradas por fecha -> = NOW(), MySQL

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

¿Cómo hago para seleccionar todos los eventos que son ya sea hoy o en el futuro?

Gracias

Respuesta

36

Usted está buscando CURDATE():

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

O:

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

Gracias! Funcionó como un amuleto – NightMICU

+0

@NightMICU: Eso es genial :) – Sarfraz

+0

¡Buena respuesta, pero solo es hora de verificar y no hay fecha! –

1

Si sólo se preocupan por la fecha, no el tiempo, utilizar CURDATE() en lugar de NOW().

Por supuesto, puede utilizar alternativamente el sinónimo CURRENT_DATE (con o sin paréntesis después), pero los documentos que señalé dan CURDATE como primer deletreo ;-).

0

Su problema es que ahora() es muy preciso. Así que las fechas para hoy y antes ahora porque comenzaron al principio del día.

Utilice esta:

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

La razón de que esta consulta:

SELECT * FROM events WHERE event_date >= NOW() 

... devuelve registros desde el futuro, se debe a NOW() incluye el tiempo, así como la fecha. Y esa porción de tiempo indica la hora en que la instrucción [función o activación] comenzó a ejecutarse. Por lo que significa el comienzo del día en un tipo de datos DATETIME se parece a: 2010-06-24 00:00:00 (AAAA-MM-DD HH: MM: SS, al microsegundo precisión), que ahora() mostraría algo como 2010-06-24 14:24:31 ...

Estas son las opciones:

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

¡Respuesta muy en profundidad, gracias! Muy útil para el futuro – NightMICU

2

también puede hacer

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

¿Qué es más preciso que el uso CURTIME() si por casualidad el uso de tiempo, así como la fecha

0

Ésta es la diferencia entre CURDATE y AHORA:

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) 

siempre que uso ahora sólo para ser precisos

Cuestiones relacionadas