sumar restar minutos minutes mes interval fecha example ejemplos date_sub año aumentar mysql sql select dateadd

restar - mysql sumar minutos a datetime



MySQL-DATE_ADD intervalo de mes (5)

Tengo un problema con la función DATE_ADD en MySQL.

Mi solicitud se ve así:

SELECT * FROM mydb WHERE creationdate BETWEEN "2011-01-01" AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) GROUP BY MONTH(creationdate)

El problema es que, en los resultados, "creo", porque junio solo tiene 30 días, la función no funciona correctamente ya que tengo los resultados del primero de julio .

¿Hay alguna manera de decirle a DATE_ADD que funcione bien y tome la cantidad correcta de días dentro de un mes?


¿Entiendo bien que usted supone que DATE_ADD("2011-01-01", INTERVAL 6 MONTH) debería darle ''2011-06-30'' en lugar de ''2011-07-01''? Por supuesto, 2011-01-01 + 6 meses es 2011-07-01. Desea algo como DATE_SUB(DATE_ADD("2011-01-01", INTERVAL 6 MONTH), INTERVAL 1 DAY) .


Bueno, para mí este es el resultado esperado; añadiendo seis meses hasta el 1 de enero.

mysql> SELECT DATE_ADD( ''2011-01-01'', INTERVAL 6 month ); +--------------------------------------------+ | DATE_ADD( ''2011-01-01'', INTERVAL 6 month ) | +--------------------------------------------+ | 2011-07-01 | +--------------------------------------------+


BETWEEN ... AND

Si expr es mayor o igual a min y expr es menor o igual que max, BETWEEN devuelve 1; de lo contrario, devuelve 0.

La parte importante aquí es IGUAL a max., Que es el 1 de julio.


DATE_ADD funciona bien con diferentes meses. El problema es que está agregando seis meses al 2001-01-01 y se supone que el 1 de julio está allí.

Esto es lo que quieres hacer:

SELECT * FROM mydb WHERE creationdate BETWEEN "2011-01-01" AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY GROUP BY MONTH(creationdate)

O

SELECT * FROM mydb WHERE creationdate >= "2011-01-01" AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH) GROUP BY MONTH(creationdate)

Para obtener más información, consulte la documentación de DATE_ADD .

* editado para corregir la sintaxis


DATE_ADD funciona correctamente. El 1 de enero más 6 meses es el 1 de julio, al igual que el 1 de enero más 1 mes es el 1 de febrero.

Entre operación es inclusiva. Por lo tanto, está haciendo todo hasta, e incluyendo, el 1 de julio. (ver también la cláusula MySQL "between" no inclusive? )

Lo que debe hacer es restar 1 día o usar <operador en lugar de entre.