Consulta MySQL-Registros entre Hoy y los Últimos 30 Días
Quiero devolver todos los registros que se agregaron a la base de datos en los últimos 30 días. Necesito convertir la fecha a mm / dd / aa debido a los propósitos de visualización.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
Mi declaración no limita los registros a los últimos 30 días - selecciona todos los registros.
¿Puede alguien señalarme en la dirección correcta? Parece que estoy cerca.
Gracias y que tengan una gran semana.
6 answers
Necesitas aplicar DATE_FORMAT
en la cláusula SELECT
, no en la cláusula WHERE
:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
También tenga en cuenta que CURDATE()
devuelve solo la porción DATE
de la fecha, por lo que si almacena create_date
como DATETIME
con la porción de tiempo completada, esta consulta no seleccionará los registros de hoy.
En este caso, necesitarás usar NOW
en su lugar:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-27 10:11:18
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 11:02:27
DATE_FORMAT
devuelve una cadena, por lo que está utilizando dos cadenas en su cláusula BETWEEN
, que no va a funcionar como espera.
En su lugar, convierta la fecha a su formato en el SELECT
y haga el BETWEEN
para las fechas reales. Por ejemplo,
SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted
FROM table
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-21 06:45:41
También puede escribir esto en mysql -
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-25 05:50:47
Para la actividad de fecha actual y la actividad completa para los 30 días anteriores use esto, ya que el SYSDATE es variable en un día el día 30 anterior no tendrá los datos completos para ese día.
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-02 22:59:09
Aquí hay una solución sin usar la función curdate()
, esta es una solución para aquellos que usan TSQL
Supongo
SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-08 13:49:50