week semana number name day actual mysql

number - MySQL DAYOFWEEK()-mi semana comienza el lunes



mysql day of week name (5)

Estoy usando la función DAYOFWEEK() en MySQL que devuelve 1 para el domingo . Pero en mi país, la semana comienza el lunes , no el domingo . ¿Hay alguna posibilidad de obtener un día de semana de MySQL formateado como: (1 - lunes, 2 - martes, ...)?


¿Qué le parece restar uno y cambiar el domingo?

IF(DAYOFWEEK() = 1, 7, DAYOFWEEK() - 1)

Por supuesto, tendrías que hacer esto para cada consulta.


Intenta usar la función WEEKDAY() .

Devuelve el índice de días laborables para la fecha (0 = lunes, 1 = martes, ... 6 = domingo).


Podría escribir un udf y tomar un valor para decirle qué día de la semana debería ser 1 se vería así (basándose en la respuesta de John para usar MOD en lugar de CASE) :

DROP FUNCTION IF EXISTS `reporting`.`udfDayOfWeek`; DELIMITER | CREATE FUNCTION `reporting`.`udfDayOfWeek` ( _date DATETIME, _firstDay TINYINT ) RETURNS tinyint(4) FUNCTION_BLOCK: BEGIN DECLARE _dayOfWeek, _offset TINYINT; SET _offset = 8 - _firstDay; SET _dayOfWeek = (DAYOFWEEK(_date) + _offset) MOD 7; IF _dayOfWeek = 0 THEN SET _dayOfWeek = 7; END IF; RETURN _dayOfWeek; END FUNCTION_BLOCK

Para llamar a esta función para que le proporcione el valor actual del día de la semana cuando su semana comienza un martes, por ejemplo, debe llamar a:

SELECT udfDayOfWeek(NOW(), 3);

Lo bueno de tenerlo como un udf es que también puedes llamarlo en un campo de conjunto de resultados como este:

SELECT udfDayOfWeek(p.SignupDate, 3) AS SignupDayOfWeek, p.FirstName, p.LastName FROM Profile p;



Use WEEKDAY() lugar de DAYOFWEEK() , comienza el lunes.

Si necesita comenzar en el índice 1, use WEEKDAY() + 1 .