我有一个查询AS400的SSRS报告。该查询采用2个参数start_date
和end_date
。因此,该报告有两个文本type
参数。
我正在尝试使用今天的日期(使用Today()
功能),并执行60天的DateDiff
,并将该值用作默认值。
以下是并发症:
Start_Date
和End_Date
参数为integer
类型变量,而不是DateTime
。DateAdd("d", -60, Today())
。因为那时,该参数被认为是日期参数,而不是整数参数。无法将该值传递给查询。Date
。同样,查询期望一个整数值。这是发送日期值(带/和所有内容)。?
。查询中有6个参数,它们与报告中的顺序完全相同。我不知道CAST
或CONVERT
如何对?
起作用。 Start_Date
和End_Date
字段的格式为:YYYYMMDD
以下是我在想的事情:
CAST
做一个STR
,然后将它们连接起来。CAST
STR
到INT
并添加-60。 但如果我这样做,我会留下一个完全随机的号码。它可能是任何东西。例如,今天的日期减去60天将是20170650
,这显然不是有效日期。
我该怎么做?我今天的日期,添加-60天,然后将其转换为整数?当我尝试这样做时,在运行报告时,我得到一个灰色的空参数文本框。我认为这样可行,我不知道为什么不行。
任何建议将不胜感激。
TL; DR:
如何在今天的约会时间内{-1}}执行-60天并将其转换为YYYYMMDD格式并将其作为DateAdd
传递给查询?
答案 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,它们在日期数据类型和数字或字符之间进行转换。