我正在从提取两个日期/时间(创建日期和关闭日期)的存储过程创建一个报告。 我需要在报告中显示差异的列(即从打开到关闭所花费的时间)。 首先,我刚刚从 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