primer - sql dia de la semana español
Obtener día de la semana en SQL 2005/2008 (9)
A pesar de que la respuesta de SQLMenace ha sido aceptada, hay una opción SET
importante que debe tener en cuenta
DATENAME devolverá el nombre de la fecha correcta pero no el mismo valor DATEPART si el primer día de la semana se cambió como se muestra a continuación.
declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select [@DefaultDateFirst] = @DefaultDateFirst
set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7
--; Set the first day of week to * TUESDAY *
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It''s not 7!
set datefirst @DefaultDateFirst
Si tengo una fecha 01/01/2009, quiero saber qué día fue, por ejemplo, lunes, martes, etc.
¿Hay una función incorporada para esto en SQL 2005/2008? ¿O necesito usar una mesa auxiliar?
Con SQL Server 2012 y en adelante puede usar la función FORMAT
SELECT FORMAT(GETDATE(), ''dddd'')
EUROPA:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
Para obtener un valor determinista para el día de la semana para una fecha determinada, puede utilizar una combinación de DATEPART() y @@datefirst . De lo contrario, depende de la configuración del servidor.
Visite el siguiente sitio para encontrar una mejor solución: MS SQL: Día de la semana
El día de la semana estará 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 de día de la semana correcto.
Puede encontrar esta versión útil.
-- Test DATA
select @@datefirst
create table #test (datum datetime)
insert #test values (''2013-01-01'')
insert #test values (''2013-01-02'')
insert #test values (''2013-01-03'')
insert #test values (''2013-01-04'')
insert #test values (''2013-01-05'')
insert #test values (''2013-01-06'')
insert #test values (''2013-01-07'')
insert #test values (''2013-01-08'')
-- Test DATA
select Substring(''Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat'',
(DATEPART(WEEKDAY,datum)+@@datefirst-1)*4+1,3),Datum
from #test
Si no desea depender de @@DATEFIRST
o usar DATEPART(weekday, DateColumn)
, solo calcule el día de la semana.
Para las semanas basadas en el lunes (Europa), el más simple es:
SELECT DATEDIFF(day, ''17530101'', DateColumn) % 7 + 1 AS MondayBasedDay
Para las semanas basadas en el domingo (América) use:
SELECT DATEDIFF(day, ''17530107'', DateColumn) % 7 + 1 AS SundayBasedDay
Esto devuelve el número del día de la semana (1 a 7) desde el 1 de enero, respectivamente, el 7, 1753.
esta es una copia de trabajo de mi código, compruébelo, cómo recuperar el nombre del día desde la fecha en sql
CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData]
@FromDate date,
@ToDate date
As
Begin
select p.ProjectName + '' ( '' + st.Time +'' ''+''-''+'' ''+et.Time +'' )'' as ProjectDeatils,
datename(dw,pts.StartDate) as ''Day''
from
ProjectTimeSheet pts
join Projects p on pts.ProjectID=p.ID
join Timing st on pts.StartTimingId=st.Id
join Timing et on pts.EndTimingId=et.Id
where pts.StartDate >= @FromDate
and pts.StartDate <= @ToDate
END
Feliz codificación ....
SELECT CASE DATEPART(WEEKDAY,GETDATE())
WHEN 1 THEN ''SUNDAY''
WHEN 2 THEN ''MONDAY''
WHEN 3 THEN ''TUESDAY''
WHEN 4 THEN ''WEDNESDAY''
WHEN 5 THEN ''THURSDAY''
WHEN 6 THEN ''FRIDAY''
WHEN 7 THEN ''SATURDAY''
END