ángeles tiempo telemundo por los hoy hora dias clima california angeles sql sql-server sql-server-2005

sql - telemundo - el tiempo en los ángeles, california, ee. uu.



AGREGAR el tiempo 23: 59: 59.999 hasta la fecha de finalización entre (7)

Desde la llegada del tipo de datos datetime2 , he estado luchando con este problema. Para calcular el final del día como un tipo de datos datetime2, agrego el número de segundos en un día a = fecha = y luego resto 100 nanosegundos. Voila:

declare @bod datetime2 declare @eod datetime2 set @bod = cast (GETDATE() as DATE) set @eod = DATEADD(ns, -100, DATEADD(s, 86400, @bod)) print @bod print @eod -- answer: 2013-12-01 00:00:00.0000000 2013-12-01 23:59:59.9999999

Ahora me voy al tipo de datos datetimeoffset .

He tenido un problema con el uso de lo siguiente:

Column_Name BETWEEN @StartDate AND @EndDate.

Esto se debe a que @EndDate = 00: 00: 00.000 para el tiempo, que no recoge todos los valores para ese día.

¿Cómo convertiría @EndDate (siempre 00: 00: 00.000) para que siempre sea Date + 23: 59: 59.999?


Primero convierto el datetime original al comienzo del día, luego le agrego horas y segundos:

DECLARAR @start DATETIME, @end DATETIME

SET @start = DATEADD (DAY, DATEDIFF (DAY, 0, GETDATE ()), 0)

SET @end = DATEADD (HORA, 23, DATEADD (n, 59, @start))

IMPRIMIR @start

IMPRIMIR @end

Oct 27 2017 12:00 AM

Oct 27 2017 11:59 PM


Puede usar between si su fecha de finalización se establece en 00:00:00 del día siguiente:

ColumnName between @StartDate and convert(datetime, convert(date, @EndDate + 1))

Esto convierte el día siguiente en una date , lo que elimina la información de horas, luego la convierte de nuevo en una datetime y datetime que agrega información de hora predeterminada: 00:00:00 .


Puedes cambiar la hora en una fecha como esta (estoy usando getdate() como ejemplo):

select cast(convert(char(8), getdate(), 112) + '' 23:59:59.99'' as datetime)

Explicación:

convert(char(8), getdate(), 112) convierte la fecha al formato yyyymmdd (como cadena).

Luego, solo puede agregar el tiempo deseado y convertir toda la cadena a datetime nuevamente.

EDITAR:

Se ralentiza el rendimiento cuando se realiza la conversión en una columna de base de datos , sí.
Pero tiene una variable de fecha y hora y solo usa el lanzamiento para cambiar el tiempo en la variable una vez
-> No veo ningún problema de rendimiento si usa mi código para cambiar su variable @EndDate .

Punto válido, sin embargo. Casting no es una buena solución en todas las situaciones.


También podrías hacer esto:

select @endDate = dateadd(ms,-3,dateadd(day,1,DATEADD(dd, DATEDIFF(dd,0,@endDate), 0)))

cuando @endDate es ''5/3/2013''


Tenga en cuenta la precisión y el redondeo del tipo DATETIME en SQL Server 2005:

los valores de fecha y hora se redondean a incrementos de .000, .003 o .007 segundos

SQL Server 2008 introdujo el tipo DATETIME2 que tiene una precisión de 100 nanosegundos. Así que en SQL Server 2008 podrías hacer:

DECLARE @d DATETIME = ''2011-10-07 00:00:00.000'' SELECT DATEADD(MS, -1, DATEADD(D, 1, CONVERT(DATETIME2, @d)))

Como alternativa, puede evitar el operador BETWEEN en este caso:

@StartDate <= Column_Name AND Column_Name < DATEADD(D, 1, @EndDate)


Una opción que evita la necesidad de agregar EndDate + 23: 59: 59.999 es no usar la comparación between y en su lugar usar column_name >= @StartDate and column_name < @EndDate +1