更改系统日期建议

时间:2019-03-26 13:52:46

标签: sql oracle

我们有一个新的软件包,该软件包使公司可以编写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是日期/时间字段,可能是我们目前尚不完全了解的问题的一部分。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

表达式to_date('SYSDATE', 'mm/dd/yyyy')试图将字符串常量'SYSDATE'转换为日期-这是行不通的。

但是您应该永远不要,永远不要在已经是日期的值上调用to_date()。这将首先将date的值转换为varchar,只是将那个varchar转换回它最初的date

因此,to_date()函数在开始的地方是错误的。您最有可能想要:

and CHG_DTM >= trunc(SYSDATE)