【问题标题】:Date time parameter in SSRSSSRS 中的日期时间参数
【发布时间】:2019-03-19 06:04:05
【问题描述】:

我有一份报告要求用户输入开始日期并允许他们从日历中进行选择。我想知道是否可以将日期作为字符串输入。现在,我有一个带有日历的文本字段,我希望用户输入 date[06302015] 而不是 [06/30/2015]

我们是否可以省略破折号并保留迄今为止的报告格式?

【问题讨论】:

  • 如果您希望最终用户输入文本值..您的查询将必须采用该参数值并将其更改为日期格式才能使参数正常工作..您将比较/过滤在日期列上肯定.. 并且错误捕获是必要的,因为用户可以输入任何内容...最好是坚持使用日历...您只需输入带有斜杠的日期,它会起作用而您不会必须使用日期选择器。
  • 请记住,作为字符串,'06302015' > '05302018'(不是意图)。但作为一个日期,'2018-05-30' > '2015-05-03'...

标签: reporting-services


【解决方案1】:

参数的类型可以从参数属性中更改,如下所示。 这将删除日历,它只是一个文本框。

【讨论】:

  • 那么这将如何帮助 OP 过滤日期时间列?当然..这允许最终用户输入文本..但表格过滤不会按原样工作!
  • 我也想显示日历,是否也可以使用日期选择器
  • 您应该提到,如果用户希望将日期作为文本,则需要将文本日期转换为代码中的日期。最好保留当前日期参数和 ALLOW NULLS 然后为文本日期添加另一个参数并仅检查 Date 参数是否为 NULL (DECLARE @DATE_internal as DATE = ISNULL(@DATE, CAST(RIGHT(@TEXT_DATE, 4) + '-' + LEFT(@TEXT_DATE, 2) + '-' + SUBSTRING(@TEXT_DATE, 3, 2) AS DATE) )
【解决方案2】:
  1. 将参数类型更改为“文本”。
  2. 添加第二个“隐藏”参数(作为日期/时间数据类型),使用表达式将 LAST_DATE_EDITED 作为输入到第二个参数的默认值中:=DateValue(Mid(Parameters!LAST_DATE_EDITED.Value,1,2) & "/" & Mid(Parameters!LAST_DATE_EDITED.Value,3,2) & "/" & Mid(Parameters!LAST_DATE_EDITED.Value,5,4)) (未测试,但应该很接近)
  3. 然后在您的报告中使用第二个参数而不是 LAST_DATE_EDITED。

如果用户输入格式不正确的数字字符串、使用文本等,SSRS 将抛出异常。

IMO,这不是最优雅的解决方案,它需要容易出错的用户输入。不是我要实现的(我会让用户使用内置的 DateTime 选择器并训练他们使用有效的分隔符,例如句点、斜杠或破折号,或者只使用日历控件)。

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多