我们有一个新的软件包,该软件包使公司可以编写SQL代码以放置在查询门户上。我们有一些报告希望将前一天作为选择之一进行编码。如果报表是在星期一运行的,我们要自动选择上一个星期五作为选择日期,我们有ORACLE SQL DEVELOPER 4.1。我们尝试使用的代码如下:
SELECT ALERT_CD,ALERT_KEY,CHG_DTM,
CASE
WHEN TO_CHAR(SYSDATE,'fmday')='sunday'
THEN SYSDATE-2
WHEN TO_CHAR(SYSDATE,'fmday')='monday'
THEN SYSDATE-3
ELSE SYSDATE-1
END "change"
FROM SG00400T
WHERE ALERT_CD='AUTO'
and CHG_DTM >= to_date('SYSDATE', 'mm/dd/yyyy')
我们收到的错误:
ORA-01858: a non-numeric character was found where a numeric was expected
01858. 00000 - "a non-numeric character was found where a numeric was expected"
*Cause: The input data to be converted using a date format model was
incorrect. The input data did not contain a number where a number was
required by the format model.
*Action: Fix the input data or the date format model to make sure the
elements match in number and type. Then retry the operation.
CHG_DTM是日期/时间字段,可能是我们目前尚不完全了解的问题的一部分。 任何帮助将不胜感激。
答案 0 :(得分:6)
表达式to_date('SYSDATE', 'mm/dd/yyyy')
试图将字符串常量'SYSDATE'
转换为日期-这是行不通的。
但是您应该永远不要,永远不要在已经是日期的值上调用to_date()
。这将首先将date
的值转换为varchar
,只是将那个varchar
转换回它最初的date
。
因此,to_date()
函数在开始的地方是错误的。您最有可能想要:
and CHG_DTM >= trunc(SYSDATE)