¿Cómo selecciono entre el primer día del mes actual y el día actual en MySQL?

Necesito seleccionar datos de la base de datos MySQL entre el primer día del mes actual y el día actual.

select*from table_name where date between "1st day of current month" and "current day" 

¿Alguien puede proporcionar un ejemplo de trabajo de esta consulta?

 select * from table_name where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() ) 

O mejor :

 select * from table_name where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() ) 

Estaba buscando una consulta similar donde necesitaba usar el primer día de un mes en mi consulta. La función last_day no funcionó para mí, pero DAYOFMONTH me DAYOFMONTH útil.

Entonces, si alguien está buscando el mismo problema, el siguiente código devuelve la fecha del primer día del mes actual.

 SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY); 

Comparando una columna de fecha con el primer día del mes:

 select * from table_name where date between DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) and CURRENT_DATE 
 select * from table_name where `date` between curdate() - dayofmonth(curdate()) + 1 and curdate() 

Ejemplo SQLFiddle

He usado la siguiente consulta. Me ha funcionado muy bien en el pasado.

 select date(now()) - interval day(now()) day + interval 1 day 

prueba esto :

 SET @StartDate = DATE_SUB(DATE(NOW()),INTERVAL (DAY(NOW())-1) DAY); SET @EndDate = ADDDATE(CURDATE(),1); select * from table where (date >= @StartDate and date < @EndDate); 
 select * from  where  between last_day(curdate() - interval 1 month + interval 1 day) and curdate();

Solución completa para el mes en curso de MySQL y el año en curso, que también hace uso de la indexación 🙂

 -- Current month SELECT id, timestampfield FROM table1 WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) AND timestampfield <= LAST_DAY(CURRENT_DATE); -- Current year SELECT id, timestampfield FROM table1 WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFYEAR(CURRENT_DATE)-1 DAY) AND timestampfield <= LAST_DAY(CURRENT_DATE); 

Un enfoque menos ortodoxo podría ser

 SELECT * FROM table_name WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7) AND table_name.date <= CURDATE(); 

como una fecha entre el primero de un mes y ahora es equivalente a una fecha en este mes, y antes de ahora. Siento que esto es un poco más fácil para los ojos que algunos otros enfoques, sin embargo.

 select * from table where date between (date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date; 
 SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month; 

Lo utilicé select DATE_ADD(DATE_SUB(LAST_DAY(now()), INTERVAL 1 MONTH),INTERVAL 1 day) first_day , LAST_DAY(now()) last_day, date(now()) today_day

Tenía un requisito similar: find first day of the month pero basado en el year end month seleccionado por el usuario en su página de perfil.

txns del problema: encuentre todos los txns realizados por el usuario en su año fiscal. Financial year se determina utilizando el valor del mes al year end , donde el month puede ser cualquier mes válido: 1 for Jan , 2 for Feb , 3 for Mar , … 12 for Dec .

Para algunos clientes, financial year end es en March y algunos lo observan en December .

 Scenarios - (Today is `08 Aug, 2018`) 1. If `financial year` ends on `July` then query should return `01 Aug 2018`. 2. If `financial year` ends on `December` then query should return `01 January 2018`. 3. If `financial year` ends on `March` then query should return `01 April 2018`. 4. If `financial year` ends on `September` then query should return `01 October 2017`. 

Y, finalmente, debajo está la consulta. –

 select @date := (case when ? >= month(now()) then date_format((subdate(subdate(now(), interval (12 - ? + month(now()) - 1) month), interval day(now()) - 2 day)) ,'%Y-%m-01') else date_format((subdate(now(), interval month(now()) - ? - 1 month)), '%Y-%m-01') end) 

dónde ? es el mes de year end (valores del 1 al 12).

 SET @date:='2012-07-11'; SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY), interval -1 MONTH) AS first_day