ORA 1722日期列上的无效数字

时间:2015-08-11 11:47:07

标签: sql oracle oracle10g

我有一行

TO_DATE('{RUN_DATE_YYYY-MM-DD}', 'YYYY-MM-DD')-A.CHANGE_DATE_EDITED AS AGE_LAST_DATE,

由内部查询中的以下行提供支持

MAX(TO_DATE(TRUNC(TO_CHAR(CSSH.CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD'),'YYYY-MM-DD')) as CHANGE_DATE_EDITED, 

我一直磕磕绊绊

ORA 1722: Invalid number

每当我运行代码时,我都会多次修改代码而无济于事。任何帮助将不胜感激。

Addl info:

CSSH.CHANGE_DATE是时间戳列

{RUN_DATE_YYYY-MM-DD}  

是日期输入参数

我正在使用Oracle 10g

1 个答案:

答案 0 :(得分:2)

max(to_date(trunc(to_char表达的意图是什么?您确定change_datetimestamp而不是名称所暗示的date吗?

您通过timestamp电话明确地将varchar2投射到to_char。然后您拨打trunc,但如果您尝试截断date,则传入的字符串不是有效参数。假设有意删除时间组件,您不想传递任何参数或传递DD之类的内容。然后你在to_date上拨打date,这没有任何意义 - 如果有效,你必须隐含地将date强制转换为{{1}为了呼叫varchar2,希望能够回到你开始时的同一个to_date。根据您的会话的NLS设置等内容,任何这些隐式转换都可能会导致错误。

我的猜测是你真的只想要

date

如果你真的想要消除时间组件(在这种情况下,首先想要将数据存储在max(cssh.change_date) 而不是timestamp中是非常奇怪的),

date