una tipos resueltos rango por obtener mes fechas fecha ejercicios ejemplos consultas consulta buscar año mysql

tipos - MySQL: consulta para obtener todas las filas del mes anterior



obtener el mes de una fecha en mysql (9)

Necesito seleccionar todas las filas en mi base de datos que fueron creadas el mes pasado.

Por ejemplo, si el mes actual es enero, entonces quiero devolver todas las filas que se crearon en diciembre, si el mes es febrero, entonces quiero devolver todas las filas que se crearon en enero. Tengo una columna date_created en mi base de datos que enumera la fecha creada en este formato: 2007-06-05 14:50:17 .


Alternativamente a la respuesta de hobodave

SELECT * FROM table WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

Podrías lograr lo mismo con EXTRACT, usando YEAR_MONTH como unidad, por lo tanto, no necesitarías el AND, así:

SELECT * FROM table WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL 1 MONTH)


Aquí está la consulta para obtener los registros del último mes:

SELECT * FROM `tablename` WHERE `datefiled` BETWEEN DATE_SUB( DATE( NOW( ) ) , INTERVAL 1 MONTH ) AND LAST_DAY( DATE_SUB( DATE( NOW( ) ) , INTERVAL 1 MONTH ) )

Saludos - saqib


Aquí hay otra alternativa. Suponiendo que tiene un campo de tipo DATE o DATETIME indexado, este debería usar el índice ya que las fechas formateadas se convertirán antes de que se use el índice. Debería ver una consulta de range lugar de una consulta de index cuando se visualiza con EXPLAIN .

SELECT * FROM table WHERE date_created >= DATE_FORMAT( CURRENT_DATE - INTERVAL 1 MONTH, ''%Y/%m/01'' ) AND date_created < DATE_FORMAT( CURRENT_DATE, ''%Y/%m/01'' )


Aunque la respuesta a esta pregunta ya se ha seleccionado, creo que la consulta más simple será

SELECT * FROM table WHERE date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();


Si no hay fechas futuras ...

SELECT * FROM table_name WHERE date_created > (NOW() - INTERVAL 1 MONTH);

Probado.


select fields FROM table WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),''%'');

este podrá aprovechar un índice si su fecha_creada está indexada, porque no aplica ninguna función de transformación al valor del campo.


SELECT * FROM yourtable where DATE_FORMAT(date_created, ''%Y-%m'') = date_format(DATE_SUB(curdate(), INTERVAL 1 month),''%Y-%m'')

Esto debería devolver todos los registros del mes calendario anterior, a diferencia de los registros de los últimos 30 o 31 días.


SELECT * FROM table WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)


WHERE created_date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) AND created_date <= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 0 DAY)

Esto funcionó para mí (selecciona todos los registros creados a partir del mes pasado, independientemente del día en que ejecute la consulta este mes)