问题描述
为了使报告正常运行,我必须在工作的Oracle SQL查询中使用报告字符串转换日期参数。尽管这听起来很奇怪-毕竟是日期,但要在我们的托管数据库中运行报表,必须使用字符串。该报表可以在带有日期参数的Crystal Reports中很好地运行,并建议大括号{}是Crystal Reports定义参数的方式。
挑战在于将当前语法转换为基于字符的语法。这是较大查询的摘录; {?01_START_DT}是格式为MM / DD / YYYY的日期参数(例如07/31/2020):
SELECT U."UnitNumber" AS UNIT_NO,U."UsingDepartment" AS USE_DEPT,U."UnitStatus" AS STATUS,(
SELECT H.USAGE
FROM UNIT_HIST H
WHERE U."UNITID" = H.UNIT_ID
AND H.COMPANY = 'OKS'
AND FISC_PD = CASE WHEN EXTRACT(MONTH FROM {?01_START_DT}) >= 7
THEN TO_CHAR(ADD_MONTHS({?01_START_DT},12),'YYYY') || TO_CHAR(ADD_MONTHS({?01_START_DT},-6),'MM')
ELSE TO_CHAR({?01_START_DT},6),'MM')
END
FROM VIEW_ALL_UNITS U
直接将参数替换为格式为MM / DD / YYYY的字符串{?START_DT}(例如,“ 07/31/2020”,不带引号),如下所示:
SELECT U."UnitNumber" AS UNIT_NO,(
SELECT H.USAGE
FROM UNIT_HIST H
WHERE U."UNITID" = H.UNIT_ID
AND H.COMPANY = 'OKS'
AND FISC_PD = CASE
WHEN EXTRACT(MONTH FROM TO_DATE({?START_DT},'MM/DD/YYYY') >= 7
THEN TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT},'MM/DD/YYYY'),'YYYY') || TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT},'MM')
ELSE TO_CHAR(TO_DATE({?START_DT},'MM')
END
FROM VIEW_ALL_UNITS U
否则会产生ORA-01858“非数字字符”错误!
我尝试了很多事情而没有成功:
- 更改为输入字符串(即使它与格式匹配)
- 将时间成分添加到格式和输入字符串中
- 添加TO_DATE的可选NLZ部分
- 通过删除EXTRACT和MONTH语句简化行(用于故障排除)
- 将CASE表达式(用于故障排除)更改为:
FISC_PD = CASE WHEN TO_DATE({?START_DT},'MM/DD/YYYY') = TO_DATE('07/01/2020','MM/DD/YYYY') THEN
不用说,不管我尝试什么,该错误仍然存在。
正如我之前提到的那样,这查询了我没有物理或电子访问权限的托管系统上的数据库。这些查询针对报告数据库。该错误没有提供行号或任何其他有助于故障排除的信息。
有什么想法可能导致此问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)