Oracle SQL TO_DATE表达式产生ORA-01858非数字字符错误

问题描述

为了使报告正常运行,我必须在工作的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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...