2010-06-14 76 views
2

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

不断收到此错误“ORA-01843:不是有效的月”

谢谢您的帮助。 To_CHAR(ITH_F.Start_Time, 'MM/DD/YYYY')

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 

回答

3

您在您的查询,其中a.S_Date是VARCHAR使用CAST(a.S_Date AS DATE)。如果您的会话日期参数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。
+0

CAST的好处()。我完全错过了。 – APC 2010-06-14 14:49:32

+0

非常感谢。这些变化很有效。 – David 2010-06-16 15:35:25

6

Oracle参数用一个前导冒号表示 - @Event_Date应该是:Event_Date。