2015-07-17 4 views
0

У меня есть две переменные @date типа datetime и @time типа time. Я хочу добавить оба, чтобы получить другую переменную datetime. И я хочу выполнить дальнейшие вычисления на нем.Как добавить дату и время в SQL Server

Ex:

Declare @date datetime 
Declare @time time 

Я хочу что-то вроде этого

@date = @date + @time (but not concatenation) 

SELECT @Startdate = DATEADD(DAY, -1, @date) 

Есть ли способ?

+0

Вы просто не хватает «установить» перед @date? –

+0

даже после выполнения set @date это просто конкатенация обоих полей. я не буду выполнять операцию dateadd. – user2045931

+0

@ пользователь2045931 проверка мой ответ. –

ответ

0

вы можете или обработку время до нескольких секунд и добавить их в значение даты и времени:

DECLARE @datetime DATETIME = GETDATE(), 
     @time TIME = '01:16:24', 
     @timeinseconds INT 

PRINT 'we add ' + CAST(@time AS VARCHAR(8)) + ' to ' + CONVERT(VARCHAR,@datetime,120)+ ':' 


SELECT @timeinseconds = DATEPART(SECOND, @time) 
         + DATEPART(MINUTE, @time) * 60 
         + DATEPART(HOUR, @time) * 3600 

SET @datetime = DATEADD(SECOND,@timeinseconds,@datetime) 

PRINT 'The result is: ' + CONVERT(VARCHAR,@datetime,120) 

Выход:

we add 01:16:24 to 2015-07-17 09:58:45: 
The result is: 2015-07-17 11:15:09 
+0

Большое вам спасибо. Это сработало :) – user2045931

+0

приветствую :) – CeOnSql

0

Если вам нужно взять дату только часть из @date и времени часть из @time - может конвертировать ваши @date и @time в строки, сцепить значения и преобразовать обратно в DateTime:

select cast(convert(nvarchar(20), @date, 104) + ' ' + 
      convert(nvarchar(20), @time, 108) as datetime2) 

Или, наоборот, если вам нужно добавить время значения даты и время, вы можете сделать что-то вроде:

select dateadd(ms, 
      datepart(ms, @time), 
      dateadd(ss, 
        datepart(ss, @time), 
        dateadd(mi, 
          datepart(mi, @time), 
          dateadd(hh, datepart(hh, @time), @date)))) 
+0

Я попробовал это. но он не работает. он не делает этого. но его выполнение не выполняется SELECT @Startdate = DATEADD (DAY, -1, @ date) – user2045931

0

Прежде всего преобразовать @date и @timeNVARCHAR() переменные, а затем CONCAT их и после того, как он преобразует его в DATETIME типа данных. После этого вы можете использовать функцию DATEADD. Попробуйте в следующем:

DECLARE @date DATETIME 
DECLARE @time TIME 

SET @date = GETDATE() 
SET @time = '10:12:13' 

SELECT DATEADD(DAY, -1, CAST(CONVERT(NVARCHAR(20), @date, 110) + ' ' + 
          CONVERT(NVARCHAR(20), @time, 108) AS DATETIME)) 

ВЫХОДА (Сегодня день -1 + время '10: 12: 13'):

2015-07-16 10:12:13.000 
+0

Что это должно делать? Можете ли вы объяснить свою идею? – CeOnSql

0

Я не уверен, что здесь происходит, но если ваши переменные DateTime и время типов, это должно работать нормально:

declare @date datetime 
declare @time time 

set @date = '20150717' 
set @time = '12:34:56' 

set @date = @date + @time 

select @date, DATEADD(DAY,-1,@date) 

См SQL Fiddle

Если проблема заключается в том, что @date содержит также часть времени, вы можете использовать:

set @date = convert(datetime, convert(date, @date)) + @time 
Смежные вопросы