2010-05-17 14 views
8

È necessario impostare la variabile datetime tra due giorni ma la parte relativa all'ora deve essere 18:00.Impostare la parte dell'ora della variabile datetime su 18:00

Ad esempio se chiamo getdate() ora otterrò 2010-05-17 13:18:07.260. Devo impostarlo su 2010-05-19 18:00:00.000.

Qualcuno ha un buon frammento per questo o qualche idea su come farlo nel modo giusto?

risposta

15
SELECT DATEADD(hh, 24 * 2 + 18, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)) 

Questo tronca la data corrente e aggiunge 2 giorni e 18 ore a (24 * 2 + 18).

Una possibile variante:

SELECT DATEADD(hh, 18, DATEADD(dd, DATEDIFF(dd, -2, GETDATE()), 0)) 
+0

Fantastico, grazie mille. Funziona perfettamente. –

1
Select DateAdd(hour, 18, DateAdd(day, 2, cast(floor(cast(getdate() as float))as datetime))) 
1

che dovevo fare qualcosa di simile, creare una procedura per eseguire da una certa ora del giorno precedente ad una certa ora del giorno corrente Questo è quello che ha fatto impostare la data di inizio alle 16:30 del giorno precedente, in pratica sottrai le parti che non vuoi riportare a 0, quindi aggiungi il valore che vuoi che sia.

-- Set Start Date to previous day and set start time to 16:30.00.000 

SET @StartDate = GetDate() 
SET @StartDate = DateAdd(dd,- 1, @StartDate) 
SET @StartDate = DateAdd(hh,- (DatePart(hh,@StartDate))+16, @StartDate) 
SET @StartDate = DateAdd(mi,- (DatePart(mi,@StartDate))+30, @StartDate) 
SET @StartDate = DateAdd(ss,- (DatePart(ss,@StartDate)), @StartDate) 
SET @StartDate = DateAdd(ms,- (DatePart(ms,@StartDate)), @StartDate) 

Spero che questo aiuti qualcuno.

Problemi correlati