T-SQL将字符串转换为时间以进行DATEDIFF计算

问题描述

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

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

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

P. [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()执行计算

请帮助!

解决方法

我看不到任何理由,假设您对针对数据源设置的凭据权限正确,则无法在数据集查询中使用该功能。

无论如何,要作弊,您可以在自己的数据库中重新创建该函数并使用该版本。

如果您在SSMS中运行以下内容

context.vwGetMeetings.ToList();   

您将获得如下脚本,

USE msdb
exec sp_helptext 'dbo.agent_datetime'

使用它在数据库中创建相同的功能。

当然,现在您知道该功能有多简单,可以创建一个功能来一步完成整个转换。

,

这对我在SSMS上有效:

declare @sourcetime char(4) = '1714'

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...