2011-09-02 13 views
41

Ok - ho chiesto alcune persone e ci deve essere un modo semplice per fare questo ....conciliano campi data e ora per DateTime, SQL Server 2008

declare @Date date 
declare @Time time 
declare @datetime datetime 

select @Date = convert(Date,GetDate()) 
select @Time = convert(Time,GetDate()) 

select @Date, @Time, @Date + @Time (+ operator fails!) 

Devo veramente a: 1) convertire in una stringa, quindi convertire in campo datetime? 2) utilizzare DateAdd e DatePart per aggiungere ore prima poi minuti, poi secondi .....

+4

non credo che questa sia una domanda duplicato, questa è una domanda circa il nuovo Tipi di data e ora in SQL 2008. L'altra domanda non li riguarda affatto e riguarda esclusivamente i tipi DateTime. –

risposta

52
@Date + cast(@Time as datetime) 

In SQL Server 2012 e presumo di SQL Server 2014 si neeed per lanciare sia la data e la variabile tempo per appuntamento.

cast(@Date as datetime) + cast(@Time as datetime) 
+0

messaggio 402, livello 16, stato 1, riga 8 I tipi di dati data e data/ora non sono compatibili nell'operatore di aggiunta. – Davos

+0

Errore di ricerca concordato - Errore del database SQL Server: i tipi di dati data e data/ora non sono compatibili nell'operatore di aggiunta. È necessario eseguire il cast sia come datetime come indicato da @jdavies. – mprost

+0

@mprost Non in SQL Server 2008 ma in SQL Server 2012 sei corretto. E presumibilmente anche in SQL Server 2014. Ho aggiornato la risposta. –

9

provarli entrambi colata a DATETIME prima:

SELECT CAST(@Date AS DATETIME) + CAST(@Time AS DATETIME) 
+0

corretto è il forma non deterministica: ALTER TABLE MyTable AGGIUNGI MyDateTime2 AS ( \t DATEADD \t ( \t \t giorno \t \t, DATEDIFF \t \t ( \t \t \t giorno \t \t \t, convertire (data, '1 9000101' , 112) \t \t \t, mydate \t \t) \t \t, CONVERT (datetime2 (7), mytime) \t) ) PERSISTED –

3

questo dovrebbe funzionare:

select @Date, @Time, CAST(@Date AS datetime) + CAST(@Time AS datetime) 
Problemi correlati