3

我需要将 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 个返回“从字符串转换日期和/或时间时转换失败”。

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

4

5 回答 5

2

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

CAST(dtDate AS DATETIME) + CAST(CAST(szTime AS TIME) as DATETIME)
于 2017-09-05T10:38:09.880 回答
1

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

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

在 rextester 上查看现场演示

于 2017-09-05T10:38:20.777 回答
0

如果您关心精度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)));

在此处运行示例

于 2017-09-05T11:47:53.837 回答
0

您可以尝试以下。

DECLARE @YourDate AS DATETIME
SET @YourDate = CONVERT(VARCHAR(10), '2017-09-05 00:00:00.000', 111) + ' 11:00'
PRINT @YourDate
于 2017-09-05T10:40:47.727 回答
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))

这仅在字符串字段始终采用 hh:mm 格式时才有效

于 2017-09-05T10:41:46.827 回答