2013-03-05 9 views
5

muszę dodać time wartość istniejących datetime wartość za pomocą T-SQL w SQL Server 2012.Jak dodać pole datetime z polem czasowym

Myślałam że DATEADD funkcja może być rozwiązaniem, ale jest nie ...

Być może mam jakoś time konwersji na datetime?

Więc mam

startDate 18.02.2013 18: 34: 40,330 (datetime)

Interval 00: 11: +00,0000000 (czas)

DataZakończenia? tsql? (datetime)

Jakaś wskazówka?

Odpowiedz

8

Spróbuj czegoś takiego. Uwaga: Nie biorę milisekund tutaj

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); 

Rezultat:

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

Teraz naprawdę nie należy przechowywać interwału w kolumnie time. time ma reprezentować punkt w czasie, a nie czas trwania. Co się dzieje, gdy przerwa wynosi> = 24 godziny? Powinieneś przechowywać czas rozpoczęcia i czas zakończenia wydarzenia (te rzeczy są zwykle tak samo ważne jak czas trwania), a Ty możesz zawsze obliczyć czas trwania z tych punktów.

+0

Dzięki za ostatni akapit! Tak, I przechowywać interwał <24 godzin. –

+3

Ale jaki jest sens przechowywania * przedziału * jako 'czasu'? Dlaczego nie po prostu zapisać liczbę sekund? –

+0

Gdy mamy tabele statyczne, które są wprowadzane bezpośrednio przez użytkowników, warto przechowywać je z czasem, aby było łatwiej zrozumieć. To jest bardzo sprytne, aby użyć DATEDIFF, aby uzyskać sekundy. Dzięki. –

2

Używam ostatnio Azure-DB i wypróbowałem poniższy kod. To nie działa w SQL 2012. Zobacz ten post, aby uzyskać więcej informacji na temat SQL bieżąco arytmetyki: Difference in datetime and time arithmetic in Azure-DB vs. sql-server 2008R2

Jestem trochę późno do partii, ale ponieważ oczywisty sposób zrobić go brakuje ...

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