2012-03-20 9 views
15

Come faccio trunc la data in SQL Server 2008 in questo modo:Tronca solo ora/minuto

ho 2012-01-02 12:04:11.443 e voglio solo per selezionare 2012-01-02 12:00:00.000 e 2012-01-02 12:04:00.000 (ora e livello di minuto)

+0

possibile duplicato di [Come posso troncare un datetime in SQL Server?] (Http://stackoverflow.com/questions/923295/how-can-i-truncate-a-datetime-in-sql-server) –

+0

In particolare, vedi la risposta di BG100 in quel thread. –

+0

possibile duplicato di [T-SQL datetime arrotondato al minuto più vicino e alle ore più vicine utilizzando le funzioni] (http://stackoverflow.com/questions/6666866/t-sql-datetime-rounded-to-nearest-minute-and-nearest -hours-with-using-functions) – user272735

risposta

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

grazie .. questo è brillante – pufos

+1

Questo è molto più pulito di qualsiasi altra soluzione che ho visto, vale la pena un voto e un commento. – Chris

+0

Sì, hai ragione. Devo aver trovato qualcosa di sbagliato –

3

Questo sembra funzionare:

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 

Risultati:

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

(2 row(s) affected) 
+0

Se inserisci codice, XML o campioni di dati, ** PLEASE ** evidenzia quelle righe nell'editor di testo e fai clic sul pulsante "code samples" ('{}') sull'editor barra degli strumenti per formattare in modo piacevole e sintassi evidenziarlo! –

+1

ok la prossima volta :-) – SmartestVEGA

+0

grazie per la risposta .. Mikael Eriksson ha una risposta più semplice. Anche + 1 per la risposta. Grazie – pufos

0

sto usando qualcosa di simile:

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

È possibile utilizzare questa formula per troncare ad altri livelli, ossia minuti:

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

È necessario ricordare che se si sta troncando a secondi livello, la differenza massima tra la data base e [timestamp] è di 68 anni.