2011-09-02 15 views
41

Ok - ja zapytałem kilka osób i nie ma być łatwym sposobem, aby to zrobić ....łączące pola daty i godziny do 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!) 

Czy naprawdę muszę na: 1) przekonwertować na ciąg, a następnie przekonwertować na pole datetime? 2) używać DateAdd i DatePart dodać godzin pierwszy wtedy minut, następnie sekund .....

+4

Nie sądzę, że jest to duplikat pytanie, to pytanie o nowy Typy daty i czasu w SQL 2008. Inne pytanie nie dotyczy w ogóle tego typu i dotyczy wyłącznie typów DateTime. –

Odpowiedz

52
@Date + cast(@Time as datetime) 

W SQL Server 2012 i zakładam SQL Server 2014 ty neeed rzucać zarówno datę i czas, aby zmienną datetime.

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

Msg 402, poziom 16, stan 1, wiersz 8 Typy danych data i data/godzina są niekompatybilne w operatorze dodawania. – Davos

+0

Uzgodnione, Błąd wyszukiwania - Błąd bazy danych programu SQL Server: Data data i data/godzina są niekompatybilne w operatorze dodawania. Musisz rzucić obie jako datetime wskazane przez @jdavies. – mprost

+0

@mprost Nie w SQL Server 2008, ale w SQL Server 2012 masz rację. I prawdopodobnie również w SQL Server 2014. Zaktualizowałem odpowiedź. –

9

Spróbuj przesłać je zarówno do DATETIME pierwszy:

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

Poprawnie jest tworzą nietoksyczne deterministyczny: Alter Tabela MojaTabela ADD MyDateTime2 CO ( \t DATEADD \t ( \t \t dzień \t \t, DATEDIFF \t \t ( \t \t \t dzień \t \t \t, konwersja (Termin „1 9000101' , 112) \t \t \t, MyDate \t \t) \t \t, konwersja (datetime2 (7) MyTime) \t) ) utrwalonej –

3

To powinno działać:

select @Date, @Time, CAST(@Date AS datetime) + CAST(@Time AS datetime) 
Powiązane problemy