2012-10-01 23 views
49

Estoy tratando de ejecutar una declaración de selección de mysql donde se ve la fecha de hoy y solo devuelve los resultados que se registraron ese día. Actualmente he intentado lo siguiente, pero parece que no funciona.MySQL Seleccionar fecha igual a hoy

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE() 

He modificado mi declaración SELECT a esto, gracias chicos.

SELECT id FROM users WHERE DATE(signup_date) = CURDATE()

+0

Parece que 'signup_date' es el campo de fecha y hora – Serjio

+0

@Serjio Sí, actualmente es un campo de fecha y hora. – Jako

+0

¿cuál es el tipo de datos de 'signup_date' si contiene el tiempo, entonces querrá utilizar el date_format en la cláusula' WHERE' para quitar el tiempo para que coincida con 'CURDATE()' – Taryn

Respuesta

111
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE() 
+0

si es necesario usar DATE() incluso si el campo es de tipo Fecha? – rashidnk

+1

@rashidnk No. Aunque no dijo claramente en la pregunta, el campo es aparentemente del tipo 'DATETIME'. – Barmar

+1

Si bien esta solución es absolutamente correcta, no escala bien (no puede usar un índice en 'signup_date', incluso si existe dicho índice). Prefiere [la solución de Serjio] (http://stackoverflow.com/a/12677822/1446005). – RandomSeed

9

suena como usted necesita agregar el formato a la WHERE:

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE_FORMAT(users.signup_date, '%Y-%m-%d') = CURDATE() 

Ver SQL Fiddle with Demo

+5

di adiós a tu actuación. Esta consulta nunca utiliza el índice – Serjio

12

Esta consulta utilizará índice si lo tienes para signup_date campo

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY) 
+0

Voto a esta respuesta son absurdos. Este es, de hecho, el enfoque preferido, ya que esta consulta podría aprovechar un índice en 'signup_date', a diferencia de otros enfoques. – RandomSeed

+0

@RandomSeed La idea general de probar 'signup_date' entre dos veces es correcta, pero los tiempos no lo son. Debería estar entre '00: 00' y' 23: 59: 59' en la fecha actual. – Barmar

+1

@Barmar Sí, tienes razón. Arreglé la respuesta. – RandomSeed

Cuestiones relacionadas