sql-server - 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() 执行计算
请帮忙!
解决方案
这在 SSMS 上对我有用:
declare @sourcetime char(4) = '1714'
select cast(left(@sourcetime, 2) + ':' + right(@sourcetime, 2) as datetime)
推荐阅读
- regex - 捕获以逗号开头的可选数据
- java - 多个放心的 POST 请求在第二次出现 500 错误
- ios - 如何通过 firemonkey 在 iOS 应用程序中实现 text-2-speech 功能?
- angular - 如何以角度编写单元测试用例以检查我的 HTML 页面中是否存在多个标签?
- dart - 哪些应用不能用flutter创建?
- android - 第三方开发者访问
- jenkins - 是否可以在 Jenkins 仪表板上显示 Jacoco 覆盖率报告?
- android-recyclerview - 如何使用另一个 Room-DAO 查询刷新我的 RecyclerView
- oracle - Oracle 按数字和字母排序,例如:1、1a、1b、2、2c
- logging - Keycloak 中缺少审计日志