如何在T-SQL中从日期和字符串创建日期时间?

3

我有一个T-SQL中的存储过程,我想从日期和字符串创建一个日期时间。

所以我有以下代码:

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个回答

8
你正在寻找类似下面这样的东西:
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

你的代码可以运行,但是日期是错误的。时间是2017年10月11日08:00,不是2017年11月10日。 - bircastri

3
这将有效:
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)

我可以在SELECT语句中使用这个吗? - Daniel Loudon
是的,或者您可以将其声明为变量并从那里使用。 - dbajtr
1
您正在使用日期,因此getdate()被截断了,我现在明白了,请忽略这个。 - Paul Maxwell

0
这是一个与字符串拼接无关的解决方案:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接