2011-07-21 17 views
10

Estoy intentando hacer una instrucción where que especifique que un campo DateTime está entre el inicio y el final del mes anterior.Obtenga DateTime con tiempo como 23:59:59

Para hacer esto, debo especificar que el primer día del mes anterior tiene un tiempo de 00:00:00 y el último día del mes anterior tiene un tiempo de 23:59:59.

Esta segunda condición es que me da un dolor de cabeza ..

Puede alguien ayudarme?

Saludos

MSSQL 2008

+0

Si necesita comparar meses, ¿por qué no simplemente extraer el mes de la fecha y hora con 'mes()'? –

Respuesta

11

intento:

SELECT DATEADD(ms, -3, '2011-07-20') 

Esto tendría la última 23:59:59 para hoy.

¿por qué 3 milisegundos ?, esto se debe a que las columnas DATETIME de Microsoft SQL Server tienen como máximo una resolución de 3 milisegundos (algo que no va a cambiar). Así que todo lo que hacemos es restar 3 milisegundos

+3

En realidad te consigue '23: 59: 59.997' – gbn

6

También puede utilizar el menos '<' sin igual. Para que no necesites 23:59:59.

Por ejemplo. DONDE DateCreated < '20111201 00:00:00'

+3

+1, así es como lo haces. Si vas solo a las 23:59:59 pasas el segundo entero entre las 23: 59: 59,000 y las 23: 59: 59.999. Incluso si especifica los milisegundos, usar

+0

@Joel Coehoorn Sin embargo, si le dan una fecha que no es 00:00:00, primero tendrá que truncarla y luego agregar 1 día, y luego no se verá más limpio que restar 3 ms y usar <=, además, te obliga a utilizar

3

probar esto, podría ser útil para usted que utiliza una de estas dos maneras de trabajar con la porción de tiempo en los campos de fecha y hora a hacer comparaciones EX: obtener un registro de usuario por un día , es decir, desde la fecha de hoy a las 12:00:00 AM hasta la fecha de hoy, pero a las 12:00:00 PM

DECLARE @FromDate datetime 
DECLARE @ToDate datetime 

SET @FromDate = GETDATE() 
SET @ToDate = GETDATE() 
Print '------------------------ ' 
PRINT @FromDate 
PRINT @ToDate 
SET @FromDate = CONVERT(DATETIME, CONVERT(varchar(11),@FromDate, 111) + ' 00:00:00', 111) 
SET @ToDate = CONVERT(DATETIME, CONVERT(varchar(11),@ToDate, 111) + ' 23:59:59', 111) 
Print '------------------------ ' 
PRINT @FromDate 
PRINT @ToDate 



DECLARE @TEST_FROM DATETIME 
SET @TEST_FROM = dateadd(month,((YEAR(@FromDate)-1900)*12)+MONTH(@FromDate)-1,DAY(@FromDate)-1) + ' 12:00:00' 

DECLARE @TEST_TO DATETIME 
SET @TEST_TO = dateadd(month,((YEAR(@ToDate)-1900)*12)+MONTH(@ToDate)-1,DAY(@ToDate)-1) + ' 23:59:59' 

Print '------------------------ ' 
PRINT @TEST_FROM 
PRINT @TEST_TO 

Esto imprimirá lo siguiente en pantalla del editor de consultas SQL

------------------------ 
Dec 28 2011 3:18PM 
Dec 28 2011 3:18PM 
------------------------ 
Dec 28 2011 12:00AM 
Dec 28 2011 11:59PM 
------------------------ 
Dec 28 2011 12:00PM 
Dec 28 2011 11:59PM 

Referencias el forma de usar el Convert es desde mi experiencia, la otra forma es desde este enlace http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx Diviértase :)

0

Intentar esta consulta para el uso de fecha y hora tipo de datos para obtener

2018-01-29 23: 59: 59.997

select dateadd(ms, -3, (dateadd(day, +1, convert(varchar, GETDATE(), 101)))) 
Cuestiones relacionadas