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;
Puede usar fácilmente el argumento MODE:
MySQL :: MySQL 5.5 Reference Manual :: 12.7 Funciones de fecha y hora
Si se omite el argumento mode, se usa el valor de la variable de sistema default_week_format:
MySQL :: MySQL 5.1 Reference Manual :: 5.1.4 Variables del sistema del servidor
Use WEEKDAY()
lugar de DAYOFWEEK()
, comienza el lunes.
Si necesita comenzar en el índice 1, use WEEKDAY() + 1
.