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:
Si desea restablecer todos los campos de fecha, excepto Mes y Año .
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.