2017-10-11 67 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 
相关问题