the month last first day mysql date

month - last day mysql



¿Cómo obtener el primer día de cada mes correspondiente en mysql? (12)

En realidad, hay una solución sencilla ya que el primer día del mes es simplemente today - (day_of_month_in_today - 1) :

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

Contraste eso con los otros métodos que son extremadamente indirectos e indirectos.

Además, dado que no estamos interesados ​​en el componente de tiempo, curdate() es una función mejor (y más rápida) que now() . También podemos aprovechar la subdate() de 2 subdate() de subdate() ya que es más subdate() que usar el interval . Entonces una mejor solución es:

select subdate(curdate(), (day(curdate())-1))

Quiero obtener el primer día de cada mes correspondiente del año actual. Por ejemplo, si el usuario selecciona ''2010-06-15'', la consulta exige ejecutarse desde ''2010-06-01'' en lugar de ''2010-06-15''.

Por favor, ayúdame a calcular el primer día de la fecha seleccionada. Actualmente, estoy tratando de ser deseable utilizando la siguiente consulta de selección de mysql:

Select DAYOFMONTH(hrm_attendanceregister.Date) >= DAYOFMONTH( DATE_SUB(''2010-07-17'', INTERVAL - DAYOFMONTH(''2010-07-17'') + 1 DAY ) FROM hrm_attendanceregister;

Gracias


Es esto lo que estás buscando:

select CAST(DATE_FORMAT(NOW() ,''%Y-%m-01'') as DATE);


Esto es antiguo, pero esto podría ser útil para los nuevos rastreadores web humanos XD

Para el primer día del mes actual, puede usar:

SELECT LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY;


Esto funciona bien para mi.

date(SUBDATE("Added Time", INTERVAL (day("Added Time") -1) day))

** reemplazar "Tiempo agregado" con el nombre de la columna

Casos de uso:

  1. Si desea restablecer todos los campos de fecha, excepto Mes y Año .

  2. Si desea conservar el formato de columna como "fecha". (no como "texto" o "número")


Estoy sorprendido de que nadie haya propuesto algo parecido a esto (no sé cuán eficiente es):

CONCAT_WS(''-'', YEAR(CURDATE()), MONTH(CURDATE()), ''1'')

Se podrían realizar operaciones de fecha adicionales para eliminar el formato, si es necesario


Lento (17s): SELECCIONE BENCHMARK (100000000, current_date - INTERVAL (día (fecha_actual) -1) DÍA); SELECCIONE BENCHMARK (100000000, cast (DATE_FORMAT (current_date, ''% Y-% m-01'') como fecha));

Si no necesita un tipo de fecha, esto es más rápido: Rápido (6s): SELECCIONE BENCHMARK (100000000, DATE_FORMAT (CURDATE (), ''% Y-% m-01'')); SELECCIONE BENCHMARK (100000000, DATE_FORMAT (current_date, ''% Y-% m-01''));


Puede usar EXTRACT para obtener las partes de fecha que desea:

EXTRACT( YEAR_MONTH FROM DATE(''2011-09-28'') ) -- 201109

Esto funciona bien para agrupar.


Puede usar la función LAST_DAY proporcionada por MySQL para recuperar el último día de cualquier mes, eso es fácil:

SELECT LAST_DAY(''2010-06-15'');

Regresará:

2010-06-30

Desafortunadamente, MySQL no proporciona ninguna función FIRST_DAY para recuperar el primer día de un mes (no estoy seguro de por qué). Pero dado el último día, puede agregar un día y restar un mes para obtener el primer día. Por lo tanto, puedes definir una función personalizada:

DELIMITER ;; CREATE FUNCTION FIRST_DAY(day DATE) RETURNS DATE DETERMINISTIC BEGIN RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1); END;; DELIMITER ;

De esa manera:

SELECT FIRST_DAY(''2010-06-15'');

Regresará:

2010-06-01


Puede usar la función DATE_FORMAT () para obtener el primer día de cualquier campo de fecha.

SELECT DATE_FORMAT(CURDATE(),''%Y-%m-01'') as FIRST_DAY_CURRENT_MONTH FROM dual;

Cambie Curdate () con cualquier otro campo de Fecha como:

SELECT DATE_FORMAT(purchase_date,''%Y-%m-01'') AS FIRST_DAY_SALES_MONTH FROM Company.Sales;

Luego, usando tu propia pregunta:

SELECT * FROM hrm_attendanceregister WHERE hrm_attendanceregister.Date) >= DATE_FORMAT(CURDATE(),''%Y-%m-01'')

Puede cambiar CURDATE () con cualquier otra fecha dada.


use el método date_format y verifique solo mes y año

select * from table_name where date_format(date_column, "%Y-%m")="2010-06"


date_add(subdate(curdate(), interval day(?) day), interval 1 day)

cambiar el ? para la fecha correspondiente


select big.* from (select @date := ''2010-06-15'')var straight_join (select * from your_table where date_column >= concat(year(@date),''-'',month(@date),''-01''))big;

Esto no creará un escaneo de tabla completo.