在 SQL 中将时间格式化为 day.hour



我正在从提取两个日期/时间(创建日期和关闭日期)的存储过程创建一个报告。 我需要在报告中显示差异的列(即从打开到关闭所花费的时间)。 首先,我刚刚从 ClosedDate 中减去 CreatedDate(在报告 [SQL Server Reporting Services] 中,而不是在存储过程中),并得到如下所示的时间:72.20:34:18.6230000(day.hour:minute:second)。 如果可能的话,我需要将其缩小到仅一天.小时......

我正在试验MSDN(http://msdn.microsoft.com/en-us/library/ms186724.aspx)上的一些功能。 DATEDIFF 几乎给了我需要的东西,但我只能指定天数或小时,理想情况下(正如我所说),我需要它将"关闭时间"显示为两者(day.hour)。

这可能吗?

在 SSRS 中,可以将自定义格式应用于该列以仅显示 days.hours。在设计模式下右键单击列 -->文本框属性 -->数字(左侧)。如果您没有看到适合您需要的日期、时间或数字格式之一,请在底部创建自定义格式。

  • 转换为分钟
  • 除以 1440 得到整天
  • 模数 1440 给出剩余分钟数,除以 60 表示小时

类似的东西(未经测试):

SELECT
    CAST(DATEDIFF(minute, CreatedDate, ClosedDate) / 1440 AS varchar(20)) + '.'
    CAST((DATEDIFF(minute, CreatedDate, ClosedDate) % 1440) / 60 AS varchar(20))
FROM
    MyTable

您可能需要摆弄我误解的 cade 中的小时表示

天和小时的 DATEDIFF 按边界计算:也就是说,如果跨越午夜的 2 个值之间只有 3 分钟,则会有一小时/天的差异。所以我用了几分钟

编辑:

要从 DATEDIFF 溢出 int 需要 4000+ 年的差异

思潮:

  • 使用 datetime2 并具有最低0001-01-01的创建日期
  • ClosedDate 是一个哨兵值,就像9999-12-31所说的"打开"项目一样
  • 创建日期和关闭日期是varchar,转换为日期时间是错误的

您的示例显示了 72 天的差异,约为 104k 分钟。

我会尝试这样做,看看你有超过 1000 年的差异,这仅仅是五亿分钟左右:

SELECT * FROM mytables
WHERE DATEDIFF(year, CreatedDate, ClosedDate) > 1000

相关内容

  • 没有找到相关文章

最新更新