SSRS - 从今天起减去60天并转换为长

时间:2017-07-10 20:54:27

标签: reporting-services db2 ssrs-2012 db2-400

我有一个查询AS400的SSRS报告。该查询采用2个参数start_dateend_date。因此,该报告有两个文本type参数。

我正在尝试使用今天的日期(使用Today()功能),并执行60天的DateDiff,并将该值用作默认值。

以下是并发症:

  1. 数据集中的Start_DateEnd_Date参数为integer类型变量,而不是DateTime
  2. 这意味着,我不能做DateAdd("d", -60, Today())。因为那时,该参数被认为是日期参数,而不是整数参数。无法将该值传递给查询。
  3. 我无法将参数的数据类型更改为Date。同样,查询期望一个整数值。这是发送日期值(带/和所有内容)。
  4. 我无法在查询中强制转换参数,因为AS400参数是要传递的PAIN。所以现在,参数是?。查询中有6个参数,它们与报告中的顺序完全相同。我不知道CASTCONVERT如何对?起作用。
  5. Start_DateEnd_Date字段的格式为:YYYYMMDD
  6. 以下是我在想的事情:

    1. 我想在今天的今年,今天的月份和今天的CAST做一个STR,然后将它们连接起来。
    2. 然后CAST STRINT并添加-60。
    3. 但如果我这样做,我会留下一个完全随机的号码。它可能是任何东西。例如,今天的日期减去60天将是20170650,这显然不是有效日期。

      我该怎么做?我今天的日期,添加-60天,然后将其转换为整数?当我尝试这样做时,在运行报告时,我得到一个灰色的空参数文本框。我认为这样可行,我不知道为什么不行。

      任何建议将不胜感激。

      TL; DR:
      如何在今天的约会时间内{-1}}执行-60天并将其转换为YYYYMMDD格式并将其作为DateAdd传递给查询?

3 个答案:

答案 0 :(得分:1)

这都是使用SSRS功能完成的。在报告中编写函数可能更容易和/或更清晰,但我会留给您。

这需要当前日期,减去60天的DATEADD并从结果中选择年,月和日。它将年份乘以10000,将月份乘以100并增加当天。您最终得到YYYMMDD格式的整数

这里是表达式(为清晰起见,分成几行)

=
(YEAR(dateadd(DateInterval.Day, -60, now())) * 10000) 
+ (Month(dateadd(DateInterval.Day, -60, now())) *100) 
+ day(dateadd(DateInterval.Day, -60, now()))

答案 1 :(得分:1)

你可以这样做:

select cast(replace(char(current_date - 60 day, ISO),'-','')as integer) from *your_table*

正如你所看到的,格式是一个整数,你得到:yyyyMMdd,你可以在subtract之后或添加你想要的东西。

答案 2 :(得分:0)

这样做的SQL方式是

   year(current_date - 60 days) * 10000
    + month(current_date - 60 days) * 100  
    +   day(current_date - 60 days)        

就个人而言,我更喜欢只有一个转换函数,它接受一个日期并返回一个数字表示。

select * 
from mytable
where trndte 
  between ConvertToDte(current_date - 60 days)
      and ConvertToDte(current_date)

实际上,我通常使用Alan Campin - IDATE - iSeries Date Conversion工具,这是一组UDF,它们在日期数据类型和数字或字符之间进行转换。