2017-10-11 70 views
1

我在T-SQL中有一個存儲過程。我想從日期和字符串創建一個日期時間。如何在tsql中從日期和字符串中創建日期時間

所以我有這樣的:

DECLARE @DATE AS DATE 
DECLARE @TIME AS NVARCHAR(5) 

SET @DATE = NOW() /*2017-10-11*/ 
SET @TIME = '08:00' 

現在,我想創建這個日期 '2017年10月11日08:00:00'

回答

3

您正在尋找類似:

DECLARE @DATE AS DATE 
DECLARE @TIME AS NVARCHAR(5) 

SET @DATE = GETDATE() /*2017-10-11*/ 
SET @TIME = '08:00' 

SELECT CONVERT(DATETIME, CONVERT(VARCHAR, @DATE) + ' '+ CONVERT(VARCHAR, @TIME)) 

輸出:

2017-10-11 08:00:00.000 
+0

你的代碼工作,但日期是錯誤的。時間是10 - 11 - 2017 08:00而不是11-10-2017 – bircastri

+0

@bircastri在上面錯了嗎? –

2

這會工作:

DECLARE @DATE AS DATE; 
DECLARE @TIME AS NVARCHAR(5); 
SET @DATE = GETDATE(); 
SET @TIME = '08:00'; 

SELECT CONCAT(@DATE, ' ', @TIME); 

或者如果你想要它作爲datetime數據類型,

SELECT CAST(CONCAT(@DATE, ' ', @TIME) AS DATETIME) 
+0

我可以在SELECT語句中使用呢? –

+0

是的,或者你可以聲明它作爲一個變量,並從那裏使用它 – dbajtr

+1

你使用日期所以getdate()被截斷,我現在明白了,請忽略這個 –

0

這裏有一個解決方案whitout字符串連接:

DECLARE @TIME AS NVARCHAR(5) 
DECLARE @MINUTES AS INT 
DECLARE @DATETIME AS DATETIME = CONVERT(DATE, GETDATE()) /* 2017-10-11 */ 

SET @TIME = '08:00' 
SET @MINUTES = DATEDIFF(MI, 
         0, 
         @TIME) /* Get number of minutes from @TIME */ 
SET @DATETIME = DATEADD(MI, 
         @MINUTES, 
         CONVERT(DATETIME, @DATETIME)) /* Add the minutes to @DATETIME */ 

SELECT @DATETIME 
相關問題