将SSRS与Oracle数据库结合使用。我需要在运行报告时提示用户输入报告日期。在我的SSRS报告中添加参数的最佳方法是什么。在找到正确的日期格式时遇到问题。在“报告参数”菜单下,我使用DateTime数据类型设置了报告参数。
继续收到此错误“ORA-01843:非有效月份”
感谢您的帮助。
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
答案 0 :(得分:6)
Oracle参数用前导冒号表示 - @Event_Date应为:Event_Date。
答案 1 :(得分:3)
您在查询中使用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。