2012-12-19 107 views
0

以下更新日期栏是我的Oracle更新查询that`s扔error--甲骨文:在一个表中

更新表设置COL1 = TO_DATE(:dateFill, 'MM/DD/YYYY HH24:MI:SS' )其中Fil1 =:ID;

dateFill = 01/05/2012, ID = 15

此语句是在程序执行时,

错误 - :ORA-01722:无效号码(日期字段)

灿有人告诉我为什么'从双选'选择To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss')';给我结果就像'05 -JAN-2012 00:00:00'。

请给我一些答案。

+0

什么是为“FIL1”列的表的数据类型是不是真的任何机会一个VARCHAR2?和你定义的数据类型:ID是我认为的数字? – DazzaL

+0

这里没有问题,'Fil1'或'ID'在这里,日期值的问题.Fil1是varchar2,'ID'是varchar2的变量。 – user1495475

+0

你说它运行在一个过程中,告诉我们你是如何绑定这些值的(dbms_sql/execute immediate),因为“:id”只在我们说动态sql时才有效。你怎么知道错误是在日期部分? – DazzaL

回答

1

如果dateFill = 01/05/2012,为什么要指定包含“hh24:mi:ss”的日期格式?

+0

这样做有什么问题?oracle会接受24小时格式。 – user1495475

+0

然后你必须提供一个包含hh24:mi:ss组件的字符串。您格式图片告诉to_date函数如何解释您传递给它的字符串。您告诉它将某些字符解释为小时/分钟/秒,但您不提供dateFill中的那些字符 –

+0

我不需要提供它,默认情况下'00:00:00'将显示正确吗? – user1495475

1

当尝试将字符串转换为数字并且该字符串无法转换为有效数字时,会发生ORA-01722错误。有效的数字包含数字'0'到'9',可能有一个小数点,字符串开头或结尾的符号(+或 - ),或'E'或'e'(如果它是浮动的科学记数法中的点数)。

0

TO_DATE总是以 '性格',即

to_date(char[,'format'[,nls_lang]) 

你的变量'dateFill'是Number数据类型的工作。 Castconvert此'dateFill' 字段到varchar和东西将工作。

0

有人能告诉我为什么是 '选择TO_DATE('01/05/2012 00:00:00', 'MM/DD/YYYY HH24:MI:SS')从双;”给我结果像 '05 -JAN-2012 00:00:00'。???

的日期显示是怎么到你的客户端/ NLS日期格式设置:

SQL> select To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss') from dual; 

TO_DATE('01/05/20120 
-------------------- 
05-jan-2012 00:00:00 

SQL> alter session set nls_date_format='mm/dd/yyyy hh24:mi:ss'; 

Session altered. 

SQL> select To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss') from dual; 

TO_DATE('01/05/2012 
------------------- 
01/05/2012 00:00:00 

SQL>