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

时间:2020-08-26 17:34:26

标签: sql oracle crystal-reports to-date

为了使报告正常运行,我必须在工作的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}, 'YYYY') || TO_CHAR(ADD_MONTHS({?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
     , 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 TO_DATE({?START_DT}, 'MM/DD/YYYY') >= 7 
                         THEN TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 12), 'YYYY') || TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), -6), 'MM')
                         ELSE TO_CHAR(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 'YYYY') || TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 6), '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 

不用说,不管我尝试什么,该错误仍然存​​在。

正如我之前提到的那样,这查询了我没有物理或电子访问权限的托管系统上的数据库。这些查询针对报告数据库。该错误没有提供行号或任何其他有助于故障排除的信息。

有什么想法可能导致此问题?

0 个答案:

没有答案