Si tengo una fecha 01/01/2009, quiero saber qué día fue, por ejemplo, lunes, martes, etc.
¿Existe una función integrada para esto en SQL Server 2005/2008? ¿O necesito usar una mesa auxiliar?
sql
sql-server
datetime
un caballo sin nombre
fuente
fuente
Respuestas:
Usar
DATENAME
oDATEPART
:fuente
Aunque la respuesta de SQLMenace ha sido aceptada, hay una
SET
opción importante que debe tener en cuentaDATENAME devolverá el nombre correcto de la fecha pero no el mismo valor DATEPART si el primer día de la semana se ha cambiado como se ilustra a continuación.
fuente
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. El domingo siempre será cero.DayOfWeek
enumeración tieneDayOfWeek.Sunday
un valor de ...0
. Por lo tanto, no importa lo establecidoDateFirst
, un valor devuelto por SQL no tratadoWEEKDAY
nunca será compatible con la contraparte .NET. Yay, Microsoft.fuente
select datename(dw,getdate())
Para obtener un valor determinista para el día de la semana para una fecha determinada, puede usar una combinación de DATEPART () y @@ datefirst . De lo contrario, dependerá de la configuración del servidor.
Consulte el siguiente sitio para obtener una mejor solución: MS SQL: Día de la semana
El día de la semana estará entonces en el rango de 0 a 6, donde 0 es domingo, 1 es lunes, etc. Luego puede usar una declaración de caso simple para devolver el nombre correcto del día de la semana.
fuente
EUROPA:
fuente
Con SQL Server 2012 y versiones posteriores, puede usar la
FORMAT
funciónfuente
esta es una copia de trabajo de mi código, verifíquelo, cómo recuperar el nombre del día desde la fecha en sql
fuente
Si no quiere depender
@@DATEFIRST
o usarDATEPART(weekday, DateColumn)
, calcule el día de la semana usted mismo.Para las semanas basadas en lunes (Europa) lo más simple es:
Para las semanas de domingo (América) use:
Esto devuelve el número del día de la semana (1 a 7) desde el 1 de enero, respectivamente, el 7 de 1753.
fuente
Puede usar,
DATEPART(dw, GETDATE())
pero tenga en cuenta que el resultado dependerá del@@DATEFIRST
valor de configuración del servidor SQL, que es la configuración del primer día de la semana (en Europa, el valor predeterminado 7 es el domingo).Si desea cambiar el primer día de la semana a otro valor, puede usarlo,
SET DATEFIRST
pero esto puede afectar a todas las partes de su 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 la
@@DATEFIRST
configuración. Puede usar la siguiente fórmula para lograrlo cuando lo necesite:donde
@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 incluido en la siguiente función para que podamos reutilizarlo fácilmente:
Ejemplo de uso:
GetDayInWeek('2019-02-04 00:00:00', 1)
Es equivalente a lo siguiente (pero independiente de la configuración DATEFIRST del servidor SQL):
fuente
Puede encontrar esta versión útil.
fuente