2013-07-18 61 views
6

Tôi có From ngày trong bảng của tôi, nhưng tôi muốn thêm thời gian sửa chữa để nóKết hợp ngày và thời gian trong SQL Server trong truy vấn SELECT

Tôi đang cố gắng như thế này

select cast(FromDate as date) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason 

nhưng điều này đang gây ra một lỗi:

Operand data type date is invalid for add operator.

+0

vâng tôi đang sử dụng máy chủ sql 2008 –

Trả lời

6

Sử dụng DATEADD:

SELECT 
    DATEADD(HOUR, 18, CAST(CAST(FromDate AS DATE) AS DATETIME)) as StartDT 
FROM 
    WsWmpLeaveReason 

Xem freely available, comprehensive SQL Server Books Online documentation để biết thêm chi tiết về DATEADD và các tùy chọn của nó

+1

"Giờ ngày giờ không được hỗ trợ bởi hàm ngày dateadd cho ngày kiểu dữ liệu." (hoặc, từ tài liệu cho 'DATEADD':" Kiểu dữ liệu trả về là kiểu dữ liệu của đối số ngày, ngoại trừ chuỗi ký tự ") –

+0

nó đưa ra lỗi này: Ngày giờ không được hỗ trợ bởi hàm ngày dateadd cho kiểu dữ liệu ngày. –

+1

@Damien_The_Unbeliever: arrrrgh! Tất nhiên - nếu đó là một 'DATE', thì nó không cho phép housr ...... vì vậy bạn cần phải chuyển sang' DATE' trước để không có thời gian, sau đó quay lại 'DATETIME' để bạn có thể thêm giờ. .... cảm ơn vì đã chỉ ra điều này! –

1

tôi sẽ chỉ cần sử dụng datetime, bổ sung:

select cast(cast(FromDate as date) as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason; 

Nếu FromDate đã thiếu một thành phần thời gian, bạn chỉ có thể làm:

select cast(FromDate as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason; 

Bạn có thể thêm time vào datetime, nhưng không phải là date.

3

Cũng giống như một mất khác nhau trên mọi thứ, tôi sẽ bánh xe ra yêu thích DATEADD/DATEDIFF lừa tôi một lần nữa:

select DATEADD(day,DATEDIFF(day,'20010101',FromDate),'2001-01-01T18:00:00') 
from WsWmpLeaveReason 

này hoạt động bằng cách tính toán (không tách rời) số ngày Từ ngày 1 tháng giêng 2.001-FromDate và sau đó cộng thêm số ngày (số nguyên) đó vào 18:00 ngày 1 tháng 1 năm 2001. Điều này, bằng cách khấu trừ, phải tạo ngày có cùng ngày với FromDate, nhưng với phần thời gian cố định là 18:00.

+0

+1 bổ sung thông minh - không phải rất trực quan và duy trì theo thời gian :-) Ai sẽ tìm ra điều này trong 6, 12 tháng kể từ bây giờ? Tốt hơn để lại một bình luận tốt trong mã của bạn! :-) –

+1

@marc_s - Lần đầu tiên, thứ hai hoặc thứ ba bạn gặp phải, nó có thể không quá trực quan. Nhưng vì đó là mẫu "go-to" của tôi cho thao tác ngày/giờ, bất cứ ai đã làm việc với tôi trong một khoảng thời gian nhanh chóng đều học được mô hình. –

Các vấn đề liên quan