2013-03-05 17 views
5

tôi có thêm time giá trị cho datetime giá trị sử dụng T-SQL trong SQL Server hiện năm 2012.Làm thế nào để thêm lĩnh vực datetime với một lĩnh vực thời gian

Tôi đã suy nghĩ rằng DATEADD chức năng nó có thể là một giải pháp, nhưng nó là không ...

Có lẽ tôi bằng cách nào đó time chuyển đổi thành datetime?

Vì vậy, tôi có

StartDate 2013/02/18 18: 34: 40,330 (datetime)

Interval 00: 11: 00.0000000 (thời gian)

EndDate? tsql? (datetime)

Bất kỳ đầu mối nào?

Trả lời

8

Hãy thử một cái gì đó như thế này. Lưu ý: Tôi không dùng mili giây ở đây

declare @dt datetime = getdate() 
declare @t time = '01:35:45' 

select dateadd(second, 
        datepart(hour,@t) * 3600 + 
        datepart(minute,@t) * 60 + 
        datepart(second,@t), 
        @dt) 
22
DECLARE @d DATETIME = '2013-02-18T18:34:40.330', 
     @t TIME(7) = '00:11:00.0000000'; 

SELECT EndDate = DATEADD(SECOND, DATEDIFF(SECOND, 0, @t), @d); 

Kết quả:

EndDate 
----------------------- 
2013-02-18 18:45:40.330 

Bây giờ, bạn thực sự không nên lưu trữ khoảng trong một cột time. time có nghĩa là đại diện cho một điểm trong thời gian, không phải là thời lượng . Điều gì sẽ xảy ra khi khoảng thời gian> = 24 giờ? Bạn nên lưu trữ thời gian bắt đầu và thời gian kết thúc của một sự kiện (những thứ đó thường ít nhất là có liên quan như thời lượng) và bạn luôn có thể tính toán thời lượng từ những điểm đó.

+0

Cảm ơn đoạn cuối cùng! Có Tôi lưu trữ khoảng thời gian <24 giờ. –

+3

Nhưng điểm lưu trữ * khoảng * là 'thời gian' là gì? Tại sao không chỉ lưu trữ số giây? –

+0

Khi chúng ta có các bảng tĩnh được người dùng nhập trực tiếp, nó có lợi để lưu trữ theo thời gian thay vì vậy nó dễ hiểu hơn. Điều này rất thông minh khi sử dụng DATEDIFF để nhận số giây. Cảm ơn. –

2

Gần đây tôi đã sử dụng Azure-DB và thử mã bên dưới. Điều này không làm việc trong SQL 2012. Xem bài đăng này để biết thêm về arithmetics SQL cập nhật: Difference in datetime and time arithmetic in Azure-DB vs. sql-server 2008R2

tôi là một chút muộn để đảng nhưng kể từ khi cách rõ ràng để làm điều đó là mất tích ...

DECLARE @StartDate datetime 
DECLARE @Interval time 
DECLARE @EndDate datetime 
SET @StartDate = '2013-02-18 18:34:40.330' 
SET @Interval = '00:11:00.000000' 

SET @EndDate = @StartDate + @Interval 

SELECT @StartDate StartDate, @Interval Interval, @EndDate EndDate 

Output: 
StartDate     Interval    EndDate 
2013-02-18 18:34:40.330 00:11:00.0000000 2013-02-18 18:45:40.330