SSRS - 从今天减去 60 天并转换为长
SSRS - Subtract 60 days from today and convert to Long
我有一个查询 AS400 的 SSRS 报告。该查询采用 2 个参数,start_date
和 end_date
。所以报告有两个文本 type
参数。
我正在尝试获取今天的日期(使用 Today()
函数),并计算 DateDiff
60 天,并将该值用作默认值。
并发症如下:
- 我在数据集中的
Start_Date
和End_Date
参数是integer
类型变量,不是DateTime
。
- 也就是说,我不能做
DateAdd("d", -60, Today())
。因为那时,该参数被认为是日期参数,而不是整数参数。无法将该值传递给查询。
- 我无法将参数的数据类型更改为
Date
。同样,查询需要一个整数值。这是发送日期值(带有 / 和所有内容)。
- 我无法在查询中转换参数,因为 AS400 参数传递起来很麻烦。所以现在,参数是
?
。查询中有 6 个参数,其顺序与它们在报告中的顺序完全一致。我不知道 CAST
或 CONVERT
如何在 ?
上工作。
Start_Date
和 End_Date
字段的格式如下:YYYYMMDD
这是我想做的事情:
- 我想做一个
CAST
今天的年、今天的月和今天的日期到 STR
然后把它们连接起来。
- 然后,
CAST
将 STR
添加到 INT
并添加 -60。
但如果我这样做,我将得到一个完全随机的数字。它可能是任何东西。例如,今天的日期减去 60 天将是 20170650
,这显然不是有效日期。
我该怎么做?我是否获得今天的日期,加上 -60 天,然后将其转换为整数?当我尝试这样做时,当我 运行 报告时,我得到一个灰色的空参数文本框。我以为这样可以,我不知道为什么不行。
如有任何建议,我们将不胜感激。
TL;DR:
如何将 DateAdd
计算到今天的日期 -60 天并将其转换为 YYYYMMDD 格式并将其作为 Integer
传递给查询?
这一切都是使用 SSRS 函数完成的。在您的报告中编写一个函数来执行此操作可能更容易 and/or 更清晰,但我会把它留给您。
这需要当前日期,执行 DATEADD
负 60 天并从结果中选择年、月和日。它将年乘以 10000,将月乘以 100,然后加上日。您最终得到一个格式为 YYYMMDD
的整数
这是表达式(为了清楚起见分成几行)
=
(YEAR(dateadd(DateInterval.Day, -60, now())) * 10000)
+ (Month(dateadd(DateInterval.Day, -60, now())) *100)
+ day(dateadd(DateInterval.Day, -60, now()))
SQL 的方法是
year(current_date - 60 days) * 10000
+ month(current_date - 60 days) * 100
+ day(current_date - 60 days)
就我个人而言,我更喜欢只有一个转换函数,它接受日期和 returns 数字表示。
select *
from mytable
where trndte
between ConvertToDte(current_date - 60 days)
and ConvertToDte(current_date)
其实我经常使用Alan Campin - IDATE - iSeries Date Conversion工具,它是一组UDF,日期数据类型和数字或字符之间的转换。
你能做到:
select cast(replace(char(current_date - 60 day, ISO),'-','')as integer) from *your_table*
如你所见,格式是一个整数,你得到:yyyyMMdd,你可以在susbtract之后添加你想要的。
我有一个查询 AS400 的 SSRS 报告。该查询采用 2 个参数,start_date
和 end_date
。所以报告有两个文本 type
参数。
我正在尝试获取今天的日期(使用 Today()
函数),并计算 DateDiff
60 天,并将该值用作默认值。
并发症如下:
- 我在数据集中的
Start_Date
和End_Date
参数是integer
类型变量,不是DateTime
。 - 也就是说,我不能做
DateAdd("d", -60, Today())
。因为那时,该参数被认为是日期参数,而不是整数参数。无法将该值传递给查询。 - 我无法将参数的数据类型更改为
Date
。同样,查询需要一个整数值。这是发送日期值(带有 / 和所有内容)。 - 我无法在查询中转换参数,因为 AS400 参数传递起来很麻烦。所以现在,参数是
?
。查询中有 6 个参数,其顺序与它们在报告中的顺序完全一致。我不知道CAST
或CONVERT
如何在?
上工作。 Start_Date
和End_Date
字段的格式如下:YYYYMMDD
这是我想做的事情:
- 我想做一个
CAST
今天的年、今天的月和今天的日期到STR
然后把它们连接起来。 - 然后,
CAST
将STR
添加到INT
并添加 -60。
但如果我这样做,我将得到一个完全随机的数字。它可能是任何东西。例如,今天的日期减去 60 天将是 20170650
,这显然不是有效日期。
我该怎么做?我是否获得今天的日期,加上 -60 天,然后将其转换为整数?当我尝试这样做时,当我 运行 报告时,我得到一个灰色的空参数文本框。我以为这样可以,我不知道为什么不行。
如有任何建议,我们将不胜感激。
TL;DR:
如何将 DateAdd
计算到今天的日期 -60 天并将其转换为 YYYYMMDD 格式并将其作为 Integer
传递给查询?
这一切都是使用 SSRS 函数完成的。在您的报告中编写一个函数来执行此操作可能更容易 and/or 更清晰,但我会把它留给您。
这需要当前日期,执行 DATEADD
负 60 天并从结果中选择年、月和日。它将年乘以 10000,将月乘以 100,然后加上日。您最终得到一个格式为 YYYMMDD
这是表达式(为了清楚起见分成几行)
=
(YEAR(dateadd(DateInterval.Day, -60, now())) * 10000)
+ (Month(dateadd(DateInterval.Day, -60, now())) *100)
+ day(dateadd(DateInterval.Day, -60, now()))
SQL 的方法是
year(current_date - 60 days) * 10000
+ month(current_date - 60 days) * 100
+ day(current_date - 60 days)
就我个人而言,我更喜欢只有一个转换函数,它接受日期和 returns 数字表示。
select *
from mytable
where trndte
between ConvertToDte(current_date - 60 days)
and ConvertToDte(current_date)
其实我经常使用Alan Campin - IDATE - iSeries Date Conversion工具,它是一组UDF,日期数据类型和数字或字符之间的转换。
你能做到:
select cast(replace(char(current_date - 60 day, ISO),'-','')as integer) from *your_table*
如你所见,格式是一个整数,你得到:yyyyMMdd,你可以在susbtract之后添加你想要的。