2012-03-20 27 views
15

¿Cómo puedo TRUNCAR la fecha en SQL Server 2008 como esto:Truncar a solamente hora/minuto

tengo 2012-01-02 12:04:11.443 y solo quiere seleccionar 2012-01-02 12:00:00.000 y 2012-01-02 12:04:00.000 (hora y el nivel minuto)

+0

posible duplicado de [¿Cómo puedo truncar una fecha y hora en SQL Server?] (Http://stackoverflow.com/questions/923295/how-can-i-truncate-a-datetime-in-sql-server) –

+0

En particular, vea la respuesta de BG100 en ese hilo. –

+0

posible duplicado de [fecha de inicio de sesión de T-SQL redondeada al minuto más cercano y horas más cercanas con el uso de funciones] (http://stackoverflow.com/questions/6666866/t-sql-datetime-rounded-to-nearest-minute-and-nearest -horas-con-usar-funciones) – user272735

Respuesta

31
declare @D as datetime = '2012-01-02T12:04:11.443' 

select dateadd(hour, datediff(hour, 0, @D), 0) 
select dateadd(minute, datediff(minute, 0, @D), 0) 
+0

gracias .. esto es brillante – pufos

+1

Esto es mucho más limpio que cualquier otra solución que he visto, vale la pena un voto y un comentario. – Chris

+0

Sí, tienes razón. Debo haber algo mal –

3

Este parece funcionar:

select [Rounded Time] = 
    dateadd(mi,datediff(mi,0,dateadd(ss,30,a.DT)),0) 

from 
    (
    select dt = convert(datetime,'8:24:29.997') 
    union all 
    select dt = convert(datetime,'8:24:30.000') 
    ) a 

resultados:

Rounded Time           
------------------------------------------------------ 
1900-01-01 08:24:00.000 
1900-01-01 08:25:00.000 

(2 row(s) affected) 
+0

Si publica código, XML o muestras de datos, ** POR FAVOR ** resalte esas líneas en el editor de texto y haga clic en el botón "muestras de código" ('{}') en el editor barra de herramientas para formatear y sintaxis muy bien, ¡destaquelo! –

+1

bien lo haremos la próxima vez :-) – SmartestVEGA

+0

gracias por la respuesta .. Mikael Eriksson tiene una respuesta más simple. También + 1 para la respuesta. Gracias – pufos

0

estoy usando algo como esto:

DATEADD(hour,DATEDIFF(hour,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00') 

Se puede utilizar esta fórmula para truncar a otros niveles, es decir, minutos:

DATEADD(minutes,DATEDIFF(minutes,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00') 

Usted debe recordar que si usted está truncando al segundo nivel, la diferencia máxima entre la fecha base y [marca de tiempo] es de 68 años.