2011-09-02 9 views
41

Ok - Yo he pedido a algunas personas y no tiene que ser una manera fácil de hacer esto ....combinando los campos de fecha y hora a 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!) 

¿Realmente tengo a: 1) convertir a una cadena, luego convertir al campo de fecha y hora? 2) el uso DateAdd y DatePart para añadir horas primero y luego minutos, luego segundos .....

+4

no creo que esto es una cuestión duplicado, esta es una pregunta acerca de la nueva Tipos de fecha y hora en SQL 2008. La otra pregunta no incluye estos y se trata de tipos de fecha y hora. –

Respuesta

52
@Date + cast(@Time as datetime) 

En SQL Server 2012 y SQL Server 2014 a suponer que neeed a emitir tanto la fecha como la variable de tiempo para fecha y hora.

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

Msg 402, nivel 16, estado 1, línea 8 Los tipos de datos fecha y fecha y hora son incompatibles en el operador de agregar. – Davos

+0

De acuerdo, error de búsqueda: error de la base de datos de SQL Server: la fecha y la fecha y hora de los datos son incompatibles en el operador de agregar. Debes usar ambos como fecha y hora tal como lo señala @jdavies. – mprost

+0

@mprost No está en SQL Server 2008 pero en SQL Server 2012 está en lo correcto. Y también, presumiblemente, en SQL Server 2014. He actualizado la respuesta. –

9

intenta transmitir a los dos a DATETIME primera:

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

Correcto es el no determinista forma: ALTER TABLE MyTable AÑADIR MyDateTime2 AS ( \t DATEADD \t ( \t \t día \t \t, DATEDIFF \t \t ( \t \t \t día \t \t \t, convertir (fecha, '1 9000101' , 112) \t \t \t, mydate \t \t) \t \t, convertir (datetime2 (7), mytime) \t) ) persistió –

3

esto debería funcionar:

select @Date, @Time, CAST(@Date AS datetime) + CAST(@Time AS datetime) 
Cuestiones relacionadas