Oracle10g Oracle:表中的更新日期列

Oracle10g Oracle:表中的更新日期列,oracle10g,Oracle10g,下面是我的oracle更新查询,该查询引发错误- 更新表集合col1=To_date:dateFill,'mm/dd/yyyyy hh24:mi:ss',其中Fil1=:ID dateFill=2012年5月1日, ID=15 此语句正在过程中执行 错误-:ORA-01722:无效的numberdate字段 有人能告诉我为什么“选择日期”是dual;'给我类似“2012年1月5日00:00:00”的结果 请给我一些答案。如果dateFill=01/05/2012,为什么要指定包含hh24:mi:

下面是我的oracle更新查询,该查询引发错误-

更新表集合col1=To_date:dateFill,'mm/dd/yyyyy hh24:mi:ss',其中Fil1=:ID

dateFill=2012年5月1日, ID=15

此语句正在过程中执行

错误-:ORA-01722:无效的numberdate字段

有人能告诉我为什么“选择日期”是dual;'给我类似“2012年1月5日00:00:00”的结果


请给我一些答案。

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

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

到目前为止,始终使用“角色”ie

to_date(char[,'format'[,nls_lang])
变量“dateFill”是数字数据类型。强制转换或转换此“日期填充” 字段转换为varchar,一切都会正常进行

有人能告诉我为什么“选择日期”是2012年5月1日00:00:00, “mm/dd/yyyy hh24:mi:ss”来自dual;'给我这样的结果 “2012年1月5日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>

这样做有什么不对?oracle将接受24小时格式。然后您必须提供一个包含hh24:mi:ss组件的字符串。格式化图片告诉to_date函数如何解释传递给它的字符串。您告诉它将某些字符解释为小时/分钟/秒,但您没有在DateFill中提供这些字符。我不必提供这些字符,默认情况下会显示“00:00:00”,对吗?可能会在to_DATE中过度指定格式。关键是格式必须至少包括以正确格式传递的组件。i、 e to_date'01/02/2012','dd/mm/yyyy hh24'是有效的,但如果输入始终仅限于截至日期'01/02/2012 04:12','dd/mm/yyyy hh24'不是因为您没有计算分钟数ora-01830。@user1495475我相信这对于时间组件是正确的,但是,要小心地假设它对其他组件是正确的——我认为在某些情况下,省略的组件被设置为sysdate的相应值。无论如何,给它一个测试。Fil1列的表数据类型是什么?它真的是varchar2吗?您定义的数据类型:ID是我假设的数字?这里的'Fil1'或'ID'没有问题,日期值有问题。Fil1是varchar2,'ID'是varchar2的变量。如果您说它在一个过程中运行,请告诉我们如何绑定值dbms_sql/execute immediate,因为:ID只有在我们谈论动态sql时才有效。另外,您如何知道错误在日期部分?不确定您是否注意到您的日期格式为“mm/dd/yyyy”,它将“01/05/2012”解释为2012年1月5日。这就是为什么你的结果是“2012年1月5日…”。