Saltar al contenido

Obtener el día de la semana en SQL Server 2005/2008

octubre 3, 2021
apple touch icon@2

Puedes usar DATEPART(dw, GETDATE()) pero tenga en cuenta que el resultado dependerá de la configuración del servidor SQL @@DATEFIRST valor que es la configuración del primer día de la semana (en Europa, el valor predeterminado es 7, que es el domingo).

Si desea cambiar el primer día de la semana a otro valor, puede usar SET DATEFIRST pero esto puede afectar a cualquier parte de la sesión de consulta que no desee.

Una forma alternativa es especificar explícitamente el valor del primer día de la semana como parámetro y evitar depender de @@DATEFIRST configuración. Puede utilizar la siguiente fórmula para lograrlo cuando lo necesite:

(DATEPART(dw, GETDATE()) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1

dónde @WeekStartDay es el primer día de la semana que desea para su sistema (del 1 al 7, lo que significa de lunes a domingo).

Lo he envuelto en la siguiente función para que podamos reutilizarlo fácilmente:

CREATE FUNCTION [dbo].[GetDayInWeek](@InputDateTime DATETIME, @WeekStartDay INT)
RETURNS INT
AS
BEGIN
    --Note: @WeekStartDay is number from [1 - 7] which is from Monday to Sunday
    RETURN (DATEPART(dw, @InputDateTime) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1 
END

Uso de ejemplo:
GetDayInWeek('2019-02-04 00:00:00', 1)

Es equivalente a lo siguiente (pero independiente de la configuración DATEFIRST del servidor SQL):

SET DATEFIRST 1
DATEPART(dw, '2019-02-04 00:00:00')
close