¿Cómo restar 30 días de la fecha y hora actual en mysql?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
Para cualquiera que no quiera usar DATE_SUB
, use CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY
. Como la pregunta menciona "restar 30 días de la fecha y hora actual ", puede que no sea lo que quiere el OP.current_timestamp
lugar decurrent_date
No lo usemos
NOW()
ya que está perdiendo el almacenamiento en caché u optimización de consultas porque la consulta es diferente cada vez. Consulte la lista de funciones que no debe usar en la documentación de MySQL .En el siguiente código, supongamos que esta tabla está creciendo con el tiempo. Se agregan cosas nuevas y desea mostrar solo las cosas en los últimos 30 días. Este es el caso más común.
Tenga en cuenta que la fecha se ha agregado como una cadena. Es mejor agregar la fecha de esta manera, desde su código de llamada, que usar la
NOW()
función ya que mata su almacenamiento en caché.Puedes usarlo
BETWEEN
si realmente solo quieres cosas desde este segundo hasta 30 días antes de este mismo segundo, pero ese no es un caso de uso común en mi experiencia, así que espero que la consulta simplificada pueda servirte bien.fuente
NOW()
y aún lo usa en su respuesta. o_O PS: su consulta devolverá otro resultado, no lo que OP probablemente quiereBETWEEN
y>=
son diferentes operadores, ¿sabes? Mi consulta limita el conjunto de resultados para30 days ago AND today
estoeverything after 30 days ago
. Por lo tanto, lostomorrow
registros no coincidirán con los míos y su consulta original, pero coincidirán con esta respuestaMySQL resta días a partir de ahora:
Huellas dactilares:
Otros argumentos de la Unidad de expresión temporal de intervalo:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
fuente
También puedes usar
fuente
Puede formatear usando el formato de fecha en SQL.
fuente
de otra manera
fuente
Si solo necesita la fecha y no la hora, use:
Como
curdate()
omite el componente de tiempo, es potencialmente más rápidonow()
y más "semánticamente correcto" en los casos en que solo le interesa la fecha.Además,
subdate()
la sobrecarga de 2 aridades es potencialmente más rápida que el usointerval
.interval
está destinado a ser para casos en los que necesita un componente que no sea de día.fuente
subdate(curdate(), 30)
es más rápido queCURRENT_DATE - INTERVAL 30 DAY
? ¿Tienes prueba? ¿Y qué tan rápido sería eso? ¿Unos microsegundos?subdate
ser potencialmente más rápido probablemente se explique de alguna manera, en su opinión, por su "sobrecarga de 2 aridades", pero, por favor, perdóneme si esta es una pregunta estúpida, ¿qué significan esas palabras (con respecto a una función )? En particular, ¿qué es "2-arity"?curdate()
realidad puede ser la elección incorrecta, porque el OP parecía querer "restar 30 días de la fecha y hora actual " (énfasis mío).