Trabajo en una universidad y nuestra fecha de inicio del año académico de los sistemas de gestión estudiantil está determinada por el lunes el 1 de agosto o antes. Necesito hacer coincidir esto en mi consulta, ¿hay alguna manera de obtener fácilmente la fecha del lunes en esta fecha o antes?T-sql Lunes antes de la fecha
Respuesta
set datefirst 1; -- Make Monday the first day of the week
select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
devoluciones de julio de 27o, 2009, que es el Lunes en o antes del 1 de agosto cambiarlo a 2005 cuando: 1 Ago era un lunes y la consulta devolverá 08-01
Puede usar datepart para obtener el día de la semana, y luego hacer un poco de matemáticas para volver a su lunes. Este ejemplo usa el valor predeterminado de los Estados Unidos de datefirst 7 (en el que el lunes es el día 2 de la semana). Ajuste los días para agregar para que sea el día de la semana del lunes para su localidad.
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
poco limpia
DECLARE @weekday int
SELECT @weekday = DATEPART(WEEKDAY, '1-Aug-2009')
SELECT CASE
WHEN @weekday = 1 THEN '1-Aug-2009' ELSE DATEADD (dd,(@weekday-2)*-1, '1-Aug-2009')
END
se trata de un algoritmo genérico que devolverá el primer lunes de cada mes (@inputdate):
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
Es un método común para obtener el primer lunes del mes en SQL Server. Este link explica cómo funciona el cálculo anterior junto con muchos otros cálculos de fecha.
Aquí es cómo el algoritmo anterior se podría utilizar para obtener el Lunes en o antes del primero día de un mes:
-- Set month to get Monday before or at 1st of month.
DECLARE @inputDate DATETIME
SET @inputDate = '2009-08-01'
-- Get first Monday of month.
DECLARE @firstMonday DATETIME
SET @firstMonday = DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
-- Determine date for first Monday on or before 1st of month.
DECLARE @startDate DATETIME
SET @startDate = @firstMonday
IF @firstMonday > @inputDate
SET @startDate = DATEADD(wk, -1, @firstMonday)
SELECT @startDate
La respuesta aceptada no funcionó para mí porque necesitaba tanto una El domingo por la semana y el lunes por la semana en la misma consulta. Esto funciona a través de "DATEFIRST" ajustes diferentes:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
"(ps, '19000101') DATEPART" determinará su "datefirst" configuración desde 1900-01-01 fue un lunes. Si desea una semana basada en martes, puede cambiar 19000101 a 19000102.
BTW, '20110515' es el único formato de fecha que funciona en todas las configuraciones de cultivo de SQL Server. Fechas como '2011-05-06' serán malinterpretadas en ciertos países. (crédito a Itzik Ben-Gan por señalar esto)
+1 para una solución agnóstica elegante, 'datefirst'. –
Agradable, debería ser la respuesta aceptada – nhaberl
- 1. Buscar la fecha del lunes con Python
- 2. TSQL SELECCIONAR registros de la fecha anterior
- 3. ¿Obtener la fecha del primer lunes de la semana?
- 4. Recuperar la fecha del lunes de la semana actual
- 5. Busque la fecha del primer lunes después de una fecha determinada
- 6. Selección de TSQL distinta según la fecha más alta
- 7. fecha de la tira de TSQL de la fecha y hora
- 8. TSQL: Fecha ENTRE Consulta - Ignorando tiempo
- 9. En Perl, ¿cómo encontrar la fecha del lunes anterior para una fecha determinada?
- 10. Anterior fecha lunes y anteriores domingos basado en Fecha de hoy
- 11. código Ruby para obtener la fecha del próximo lunes (o cualquier día de la semana)
- 12. Obtener la fecha del lunes en la semana actual en PHP 4
- 13. TSQL, la construcción de índices antes o después de la entrada de datos
- 14. Python: Convertir ('Lunes', 'Martes', 'Miércoles') a 'Lunes a Miércoles'
- 15. mysql semana de lunes a domingo
- 16. Registro de TSQL dentro de la transacción
- 17. Obtener fecha para el lunes y el viernes para la semana actual (PHP)
- 18. ¿Cómo llegar 30 días antes de la fecha actual?
- 19. filas de conteo antes de la transformación con un tsql cursor
- 20. Obtenga la fecha de inicio y la fecha de finalización de la semana actual (inicio de la semana del lunes y finaliza el domingo)
- 21. Seleccionar de la unión tsql
- 22. Días laborables (lunes a viernes) en PHP
- 23. MySQL: ¿Cómo puedo saber 'fecha de última Lunes' (problema de rendimiento)
- 24. TSQL DateTime to DateKey Int
- 25. php - Una hora antes que la fecha especificada
- 26. ¿Cómo determinar la fecha un día antes de una fecha determinada en Java?
- 27. si NSDate es el lunes
- 28. PHP strtotime() diferentes resultados del lunes de esta semana
- 29. Java: cómo obtengo la fecha de x día en un mes (por ejemplo, el tercer lunes de febrero de 2012)
- 30. buscando el día de inicio (lunes) de la semana actual
Lo he marcado porque lo siguiente arroja un resultado incorrecto: seleccione dateadd (dd, -datepart (dw, '2011-05-15') + 2, '2011 -05-15 '). Esto devuelve '2011-05-16'. –