Si tengo una fecha 01/01/2009, quiero saber qué día fue, p. Lunes, martes, etc. ...Obtener el día de la semana en SQL 2005/2008
¿Hay una función incorporada para esto en SQL 2005/2008? ¿O necesito usar una tabla auxiliar?
Si tengo una fecha 01/01/2009, quiero saber qué día fue, p. Lunes, martes, etc. ...Obtener el día de la semana en SQL 2005/2008
¿Hay una función incorporada para esto en SQL 2005/2008? ¿O necesito usar una tabla auxiliar?
thx, probé el nombre de la fecha pero usé d, me devolvió un número entero. dw funciona como se esperaba –
Es por eso que prefiero usar select datename (weekday, weekday, getdate()). No tengo que recordar que dw vuelve el día de la semana ... cuando puedo usar "día de la semana" en su lugar. –
Alguien echando un vistazo a esto - tenga en cuenta que el ** comienzo predeterminado de la semana es el domingo **. Mire la respuesta de @ Sung para saber cómo cambiarlo de manera segura –
A pesar de que la respuesta de SQLMenace ha sido aceptado, hay una opción importante SET
usted debe ser consciente de
DATENAME se devolver la fecha correcta nombre pero no el mismo valor DATEPART si el primer día de la semana se ha modificado como se ilustra 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
Entonces, para obtener un valor constante de fecha y hora, debe '(@@ datefirst - 1 + datepart (día de la semana, date))% 7'. El domingo siempre será cero. –
kindof horrible esto es estático así que tienes que seguir la consulta original, cambiar el valor, ejecutar la consulta, restablecer el patrón original –
sí, eres hombre correcto, esta es una nota importante (Y) –
para obtener un valor determinístico para el día de la semana para una fecha determinada se puede usar una combinación de DATEPART() y @@datefirst. De lo contrario, dependerá de la configuración en el servidor.
Mira la siguiente sitio para una mejor solución: MS SQL: Day of Week
El día de la semana estará entonces en el rango de 0 a 6, donde 0 es domingo, 1 es el lunes, etc A continuación, se puede utilizar una declaración de caso simple para devolver el nombre de día de la semana correcto.
Ponga la respuesta en la respuesta para que la gente no tenga que hacer clic en un enlace para acceder a ella. –
Esto sería aceptado como la respuesta correcta. Gracias. – Juozas
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
Debe saber que hay una función incorporada para lograr lo mismo. 'seleccionar nombre de fecha (dw, getdate())' –
Gracias, función incorporada puede reducir la línea de código – Sutirth
@SohamDasgupta esta función incorporada no devuelve el mismo resultado para la versión no inglesa de MS SQL. –
Ésta es una copia de trabajo de mi código comprobarlo, cómo retrive nombre del día de 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 de codificación ....
¿Qué tal un etiquetado feliz? ;) – tamasgal
ja, ja, ja ... –
Usted puede encontrar esta versión muy ú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)[email protected]@datefirst-1)*4+1,3),Datum
from #test
Este es un código obtuso, y no da ninguna indicación de lo que está haciendo o tratando de lograr – brewmanz
EUROPA:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
Incluya la explicación de lo que hace su código y cómo responde la pregunta. Si obtiene un fragmento de código como respuesta, es posible que no sepa qué hacer con él. La respuesta debería dar al OP y a los futuros visitantes orientación sobre cómo depurar y solucionar su problema. Señalar, cuál es la idea detrás de su código, ayuda enormemente a comprender el problema y aplicar o modificar su solución. – Palec
Con SQL Server 2012 y en adelante se puede utilizar la función
SELECT FORMAT(GETDATE(), 'dddd')
FORMAT
Si no quiere depender de @@DATEFIRST
o utilizar DATEPART(weekday, DateColumn)
, justo Calcule el día de la semana usted mismo.
Durante semanas los lunes base (Europa) más simple es:
SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay
Durante semanas basados Domingo (América) Uso:
SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay
Esto devolverá el número de días de la semana (1 a 7) cada vez desde enero Primero, 7mo, 1753.
Si tiene una tabla que contiene búsquedas de porciones de fecha, generalmente ha hecho algo mal.Las funciones de fecha de SQL Server son muchas y robustas por lo que cualquier dato que necesite extraer de una fecha se puede hacer fácilmente en una columna de fecha y hora. –
tablas auxiliares son muy útiles para los cálculos de fecha, no es raro tener una tabla auxiliar de calendario ... –
"Útil para los cálculos de fecha" es muy dudoso. La mayoría de los cálculos de fecha se pueden manejar sin ningún tipo de tabla auxiliar y tendrán un mejor rendimiento también. En algunos casos, una tabla simple de Números hará el trabajo, sin necesidad de una tabla con las fechas reales. La única razón por la que he visto que se necesita una tabla de calendario real es cuando las reglas para qué días son días de trabajo y qué días no son son muy complicadas. Lo que he visto con demasiada frecuencia es que las personas usan tablas de fechas porque no saben cómo hacerlo de otra manera. Luego tienen que completar la tabla de fechas de vez en cuando. Tonto. – ErikE