连接日期和字符串以在SQL

时间:2017-09-05 10:33:30

标签: sql sql-server date datetime2

我需要将SQL中的日期时间和时间字段连接到单个日期时间。

例如,我的日期时间为2017-09-05 00:00:00.000,字符串时间为11:00。我想要的是2017-09-05 11:00:00.000

视图中的单个字段

我已尝试将日期时间转换为日期,然后将新日期和字符串日期字段连接在一起,但这不起作用。

要投射我正在使用的日期时间:CAST(dtDate AS DATE) AS dtNewDate工作正常。然后,当我使用:CAST(dtNewDate + szTime AS datetime) AS dtNewDateTime时,视图的创建工作正常,但是当从字符串转换日期和/或时间时,选择前1000会返回"转换失败。"

是否有更简单的方法可以执行此操作,或者任何人都可以提供一些建议(除了将日期和时间存储在单个日期时间字段中,因为它由第三方应用程序填充,我无法访问变化)

5 个答案:

答案 0 :(得分:1)

您可以将两个datetime值一起添加,请尝试:

CAST(dtDate AS DATETIME) + CAST(CAST(szTime AS TIME) as DATETIME)

答案 1 :(得分:1)

假设11:00代表11:00:00,您可以执行以下操作:

SELECT dtDate + CONVERT(DateTime, szTime, 108)
FROM...

See a live demo on rextester

答案 2 :(得分:0)

您可以尝试以下。

DECLARE @YourDate AS DATETIME
SET @YourDate = CONVERT(VARCHAR(10), '2017-09-05 00:00:00.000', 111) + ' 11:00'
PRINT @YourDate

答案 3 :(得分:0)

另一种方法是从你的字符串字段获取小时,将其转换为int,并将其作为小时数添加到日期时间

declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:00'

select left(@stringtime, 2),
       dateadd(hour, convert(int, left(@stringtime, 2)), @date)

如果你还需要分钟,你可以这样做:

declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:05'

select left(@stringtime, 2),
       right(@stringtime, 2),
       dateadd(minute, convert(int, right(@stringtime, 2)), dateadd(hour, convert(int, left(@stringtime, 2)), @date))

仅当stringfield格式为hh:mm

时才会有效

答案 4 :(得分:0)

如果您关心precision with DATETIME2

DECLARE @D DATETIME = '2017-01-01';

DECLARE @T varchar(7) = '11:00';

SELECT DATEADD(day, DATEDIFF(day, '19000101', @D), CAST(CAST(@T AS TIME) AS DATETIME2(7)));

Running example here