增加小时和天数

时间:2012-06-29 21:23:19

标签: sql sql-server sql-server-2008 reporting-services

我正在SSRS中建立一份报告。

在设计模式中,它看起来像这样:

enter image description here

tat2是值1到192,并在报告中显示如下:

1
2
3
...
192

我想知道是否有办法改为做这样的事情:

DAY 1 12:00AM
DAY 1 1:00AM
DAY 1 2:00AM
...
DAY 7 9:00PM
...
DAY 8 12:00AM

换句话说,我想把数字1到192变成几小时和几天。

2 个答案:

答案 0 :(得分:3)

您可以使用Date.AddHours() - 只需创建一个新的日期,这是任何一年的开始并使用

Date.AddHours(Fields!YourNumericField.Value)

通过这种方式,你可以获得超过192小时的时间 - 你会超过192吗?什么是最大范围,因为这将在365处滚动。您可以混合和匹配并执行表达,但是:

=Math.Ceiling(Fields!YourNumericField.Value / 24) & SomeDate.AddHours(Fields!YourNumericField.Value)

像这样的东西

我在这台机器上没有SSRS来测试:P

编辑:

好的,要获得基准日期,您可以使用新的DateTime(年,月,日)

http://msdn.microsoft.com/en-us/library/system.datetime.aspx

所以表达式

="DAY " & Math.Ceiling(Fields!tat2.Value / 24) & " " & format(new DateTime(2000, 1, 1).AddHours(Fields!tat2.Value), "hh:mm tt")

这应该给出:

DAY 1 10:45 AM

应该有效 - 如果要更改10:00 AM位的格式,请检查此引用:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

“HH:mm”为您提供24小时时间+分钟,例如23时54

“hh:mm tt”是12小时,例如中午12:00

玩游戏

答案 1 :(得分:1)

这可以在底层查询中轻松完成 - 不确定在SSRS中执行此操作:

SELECT 
  Tat2 / 24 + 1 as Day, 
  CAST(Tat2 % 24 AS CHAR(2)) + ':00 ' +
    CASE WHEN Tat2 % 24 > 12 then 'PM' else 'AM' end as AMPM
FROM YourTable

当然,这不会超过365天,因为它不会是数月或数年。