vivo una solo resultados partidos partido online obtener movil mis minutos mes marcadores marcador hoy hora futbol funciones fechas fecha entre ejemplos directo dias delos datepart con calcular bet365 año apuestas sql tsql

una - obtener solo la fecha de un datetime en sql server



Fecha anterior del lunes y domingos anterior basada en la fecha de hoy (5)

Aún mejor, creo que esto funciona para cualquier fecha, cualquier día de la semana, con cualquier parámetro DateFirst (establecido el primer día de la semana, generalmente 1-lunes en Francia, el valor predeterminado es 7-domingo).

create function [dbo].[previousWeekDayDate](@anyDate date, @anyWeekDay int) returns Date as begin return DATEADD(dd, ((DATEPART(dw,@anyDate) + @@DateFirst - @anyWeekDay + 13) % 7) * -1, @anyDate) end

Trabaja para SQL 2008, crea la función y usa:

SELECT dbo.previousWeekDayDate(GetDate(),1) --for Monday SELECT dbo.previousWeekDayDate(GetDate(),7) --for Sunday

Necesito la sintaxis correcta para darme:

  1. Semanas anteriores: fecha del lunes basada en la fecha / hora actual usando GETDATE()
  2. Semanas anteriores Fecha de domingos basada en la fecha / hora actual usando GETDATE()

Entonces, según la fecha de hoy (14/09/2012) me gustaría lo siguiente:

  1. Fecha anterior del lunes = 09/09/2012
  2. Fecha de domingos anterior = 09/09/2012

Cabe señalar que el problema con los domingos parece que ya no está presente al menos a partir de MSSQL 2012. Tanto la solución simple

SELECT DATEADD(wk, DATEDIFF(wk, 6, @input), 0)

y el complejo

SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 0)

Devuelva lo mismo para cualquier fecha que haya intentado, incluidos los domingos.


Creo que esta es una solución mucho más limpia:

SELECT -- 17530101 or 1753-01-01 is the minimum date in SQL Server DATEADD(dd, ((DATEDIFF(dd, ''17530101'', GETDATE()) / 7) * 7) - 7, ''17530101'') AS [LowerLimit], -- Last Week''s Monday DATEADD(dd, ((DATEDIFF(dd, ''17530101'', GETDATE()) / 7) * 7) - 1, ''17530101'') AS [UpperLimit] -- Last Week''s Sunday.

Que se puede usar así en una consulta del mundo real:

SELECT * FROM SomeTable WHERE SomeTable.[Date] >= DATEADD(dd, ((DATEDIFF(dd, ''17530101'', GETDATE()) / 7) * 7) - 7, ''17530101'') AND SomeTable.[Date] <= DATEADD(dd, ((DATEDIFF(dd, ''17530101'', GETDATE()) / 7) * 7) - 1, ''17530101'')

Aquí hay algunas pruebas:

1. año bisiesto

Fecha actual: 2016-02-29 00:00:00.000

Resultados:

LowerLimit UpperLimit 2016-02-22 00:00:00.000 2016-02-28 00:00:00.000

2. La semana pasada fue en otro año.

Fecha actual: 2016-01-06 00:00:00.000

LowerLimit UpperLimit 2015-12-28 00:00:00.000 2016-01-03 00:00:00.000

3. Límite inferior en el mes anterior y límite superior en el mes actual

Fecha actual: 2016-05-04 00:00:00.000

LowerLimit UpperLimit 2016-04-25 00:00:00.000 2016-05-01 00:00:00.000

4. La fecha actual es el domingo.

Fecha actual: 2016-05-08 00:00:00.000

LowerLimit UpperLimit 2016-04-25 00:00:00.000 2016-05-01 00:00:00.000


En lugar de usar una opción de caso, también puede hacer esto para obtener el domingo de la semana actual:

SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE())

Para obtener el domingo de la semana anterior, resta 7 días más:

SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1-6, GETDATE())


Fácil:

--start of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) --end of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6)

EDITAR :

Lo de abajo manejará el tema de la fecha del domingo.

DECLARE @input varchar(10) --SET @input = ''9/9/2012'' -- simulates a Sunday SET @input = GETDATE() --start of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 0) --end of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 6)