2011-10-10 13 views
7

Necesito obtener el resultado de la tabla, que la fecha debe ser una diferencia de 5 desde la fecha actual.Mysql Datediff consulta

es decir, specific_date columna está presente en mi tabla. El formato de la fecha es YYYY-MM-DD.

necesito la consulta algo como,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

Respuesta

6

Parece que usted está tratando de hacer esto:

WHERE specific_date < (NOW() + 5 days) 

En primer lugar, pensar cuidadosamente acerca de los casos límite. Estos casos límite pueden morderse los tobillos en SQL. ¿De verdad quiere

WHERE specific_date <= (NOW() + 5 days) 

¿Sus marcas de tiempo specific_date columnas contienen sólo días (es decir fechas con tiempos iguales a la media noche) o ellos contienen fechas y horas? Si va a obtener los resultados que desea, debe tener cuidado con esos detalles.

En cualquier caso, intente lo siguiente:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY) 

Ésta es una buena manera de hacer una búsqueda de este tipo. El valor de columna se encuentra solo en un lado del predicado de desigualdad (<=) por lo que mySQL puede hacer un análisis de rango de índice si tiene un índice en la columna.

La aritmética de fechas en MySQL es bastante flexible. Puede hacer

NOW() + INTERVAL 10 SECOND 
    NOW() - INTERVAL 2 MINUTE 
    NOW() + INTERVAL 4 HOUR 
    CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */ 
    LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/ 
    NOW() - INTERVAL 1 QUARTER 
    CURDATE() - INTERVAL 5 YEAR 

y así sucesivamente.

+0

Sí gracias, funcionó. – sathish

+0

¿Funciona esto también con horas? por ejemplo: 'WHERE fecha_específica <= DATE_ADD (AHORA(), INTERVALO 24 HORAS)' –

+0

Sí, ver mi edición. –

3

Tenga una mirada en el operador BETWEEN.

expr BETWEEN min AND max 

Otra forma es utilizar el DATE_SUB operador

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)