首页 > 解决方案 > T-SQL 将字符串转换为时间以进行 DATEDIFF() 计算

问题描述

我在将字符串转换为时间以使用另一个合法时间字段执行 DATEDIFF() 计算时遇到问题。我的最终目标是在 SSRS 中创建报告。

我能够在 SSMS 中执行此任务的唯一方法是使用:

,CAST(msdb.dbo.agent_datetime('19000101', P.[3]+'00') AS TIME(0)) AS [Reached Time]

第[3]页 是一个字符串字段(示例值为 0744)。由于“msdb.dbo.agent_datetime”的格式,我添加了毫秒的 +'00'。

以上在 SSMS 中完美运行,并给出了 07:44:00 的值。但是,这个“msdb.dbo.agent_datetime”函数在 SSRS 中不起作用。只有当我删除任何提及“msdb.dbo.agent_datetime”时,我的报告才会运行。

我需要一种不同的方法来将此字符串值(例如 0744)更改为 07:44 或 07:44:00 的合法时间值。

我努力了:

FORMAT(CONVERT(INT,P.[3]), 'HH:mm', 'en-us') --Returns value of HH:mm

CONVERT(VARCHAR, P.[3], 24) --Returns value of 0744

CONVERT(TIME, P.[3]) --Returns value of 00:00:00.0000000

CAST(P.[3] AS TIME) --Returns value of 00:00:00.0000000

CAST(CONVERT(INT,P.[3]) AS TIME) --Explicit conversion from data type int to time is not allowed.

其他组合也会出错。我什至尝试在 SSRS 中格式化时间,但没有成功。

我可以通过修改字符串使它看起来像一个时间,但随后无法使用 DATEDIFF() 执行计算

请帮忙!

标签: sql-servertsqlreporting-servicesssms

解决方案


这在 SSMS 上对我有用:

declare @sourcetime char(4) = '1714'

select cast(left(@sourcetime, 2) + ':' + right(@sourcetime, 2) as datetime)

推荐阅读