连接日期和字符串以在 SQL 中创建日期时间

Concatenate date and string to create datetime in SQL

我需要将 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 returns a "conversion failed when converting date and/or time from character string."

有没有更简单的方法来做到这一点,或者任何人都可以提供一些建议(除了首先将日期和时间存储在单个日期时间字段中,因为它由我没有的第三方应用程序填充访问更改)

您可以将两个 datetime 值相加,因此请尝试:

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

假设 11:00 代表 11:00:00,你可以这样做:

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

See a live demo on rextester

您可以尝试关注

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

另一种方法是从字符串字段中获取小时,将其转换为 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))

这仅在字符串字段始终采用 hh:mm

格式时才有效

如果你关心 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