2011-09-02 27 views
41

Ok - Tôi đã hỏi một vài người và có đã có được một cách dễ dàng để làm điều này ....kết hợp Date and Time trường để 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!) 

Tôi thực sự có tới: 1) chuyển đổi thành chuỗi, sau đó chuyển thành trường datetime? 2) sử dụng DateAdd và DATEPART thêm giờ đầu tiên sau đó phút, sau đó giây .....

+4

Tôi không nghĩ rằng đây là một câu hỏi trùng lặp, đây là một câu hỏi về việc mới Các kiểu ngày tháng và thời gian trong SQL 2008. Câu hỏi khác không liên quan đến các kiểu này và tất cả đều là về các kiểu DateTime. –

Trả lời

52
@Date + cast(@Time as datetime) 

Trong SQL Server 2012 và tôi giả SQL Server 2014 bạn neeed để cast cả ngày và biến thời gian để ngày giờ.

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

Msg 402, Cấp 16, Tiểu bang 1, Dòng 8 Ngày loại dữ liệu và ngày giờ không tương thích trong toán tử cộng. – Davos

+0

Đồng ý, lỗi tra cứu - Lỗi cơ sở dữ liệu máy chủ SQL: Ngày loại dữ liệu và ngày giờ không tương thích trong toán tử thêm. Bạn cần phải cast cả hai như datetime như được chỉ ra bởi @jdavies. – mprost

+0

@mprost Không có trong SQL Server 2008 nhưng trong SQL Server 2012 bạn là chính xác. Và cũng có lẽ trong SQL Server 2014. Tôi đã cập nhật câu trả lời. –

9

Hãy thử casting họ vừa để DATETIME đầu tiên:

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

Đúng là hình thức không xác định: ALTER TABLE MyTable ADD MyDateTime2 AS ( \t DATEADD \t ( \t \t ngày \t \t, DATEDIFF \t \t ( \t \t \t ngày \t \t \t, CONVERT (DATE, '1 9000101' , 112) \t \t \t, mydate \t \t) \t \t, CONVERT (datetime2 (7), mytime) \t) ) vẫn kiên trì –

3

này nên làm việc:

select @Date, @Time, CAST(@Date AS datetime) + CAST(@Time AS datetime) 
Các vấn đề liên quan