我需要将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会返回"转换失败。"
是否有更简单的方法可以执行此操作,或者任何人都可以提供一些建议(除了将日期和时间存储在单个日期时间字段中,因为它由第三方应用程序填充,我无法访问变化)
答案 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...
答案 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)));