【问题标题】:SSRS - Oracle DB, Passing Date parameterSSRS - Oracle DB,传递日期参数
【发布时间】:2010-06-15 01:05:29
【问题描述】:

将 SSRS 与 Oracle 数据库结合使用。我需要在运行报告时提示用户输入报告日期。在我的 SSRS 报告中添加参数的最佳方法是什么。无法找到正确的日期格式。在“报告参数”菜单下,我使用 DateTime 数据类型设置了报告参数。

不断收到此错误“ORA-01843: Not a Valid Month”

感谢您的帮助。

Select
    a.OPR_Name,
    a.OPR,
    a.Trans_Desc,
    a.Trans_Start_Date,
    Cast(a.S_Date as date) as S_Date,
    Sum(a.Duration) as T
From (
    Select
          US_F.OPR_Name,
          ITH_F.OPR,
          ITH_F.ITH_RID,
          ITH_F.TRANSACT,
          Transact.DESC_1 as Trans_Desc,
          To_CHAR(ITH_F.Start_Time,'DD-Mon-YY') as Trans_Start_Date,
          To_CHAR(ITH_F.Start_Time,'MM/DD/YYYY') as S_Date,
          Substr(To_CHAR(ITH_F.Start_Time,'HH24:MI'),1,6) as Start_Time,
          To_CHAR(ITH_F.End_Time,'DD-Mon-YY') as Trans_End_Date,
          Substr(To_CHAR(ITH_F.End_Time,'HH24:MI'),1,6) as End_Time,
          Cast(Case When To_CHAR(ITH_F.Start_Time,'DD-Mon-YY') = To_CHAR(ITH_F.End_Time,'DD-Mon-YY')
               Then (((To_CHAR(ITH_F.End_Time,'SSSSS') - To_CHAR(ITH_F.Start_Time,'SSSSS')) / 60))/60 
               Else ((86399 - (To_CHAR(ITH_F.Start_Time,'SSSSS')) + To_CHAR(ITH_F.End_Time,'SSSSS'))/60)/60
               End as Decimal(3,1)) as Duration        
    from Elite_76_W1.ITH_F 
         Left Join Elite_76_W1.Transact
               on Transact.Transact = ITH_F.Transact
         Left Join Elite_76_W1.US_F
               on US_F.OPR = ITH_F.OPR
    Where ITH_F.TRANSACT not in ('ASN','QC','LGOT')
 ) a
Where a.S_Date =  @Event_Date
Having  Sum(a.Duration) <> 0
Group By a.OPR_Name,
         a.OPR,
         a.Trans_Desc,
         a.Trans_Start_Date,
         a.S_Date
 Order by a.OPR_Name

【问题讨论】:

    标签: oracle reporting-services


    【解决方案1】:

    Oracle 参数以冒号开头 - @Event_Date 应为 :Event_Date。

    【讨论】:

      【解决方案2】:

      您在查询中使用CAST(a.S_Date AS DATE),其中a.S_Date 是一个VARCHAR:To_CHAR(ITH_F.Start_Time, 'MM/DD/YYYY')。如果您的会话日期参数 NLS_DATE_FORMAT'MM/DD/YYYY' 不同,这将导致格式错误(在您的情况下,我怀疑您的 NLS_DATE_FORMAT 类似于 DD-MON-YYYY,导致“月份”错误)。

      几个选项:

      • 不要在内部查询中使用TO_CHAR(总是尽量保持内部计算的日期格式,只在它所属的地方使用TO_CHAR——在GUI中)。 如果您只需要日期部分,请使用 TRUNC
      • 在外部查询中使用 TO_DATE 而不是 CAST:to_date(a.S_Date, 'MM/DD/YYYY'),这显然很乏味:您将日期转换为稍后转换为日期的 varchar。

      【讨论】:

      • CAST() 的好地方。我完全错过了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多