Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 错误ORA-01841:(完整)年份必须介于-4713和+9999之间,并且在使用yyyymmdd格式加载数据时不能为0_Sql_Oracle_Oracle10g_Date Format_To Date - Fatal编程技术网

Sql 错误ORA-01841:(完整)年份必须介于-4713和+9999之间,并且在使用yyyymmdd格式加载数据时不能为0

Sql 错误ORA-01841:(完整)年份必须介于-4713和+9999之间,并且在使用yyyymmdd格式加载数据时不能为0,sql,oracle,oracle10g,date-format,to-date,Sql,Oracle,Oracle10g,Date Format,To Date,下面的语句在2019年1月11日抛出一个错误 我们检查paydate的值为20190111,从来源上看是正确的。 但是,代码仍然会抛出一个错误 ORA-01841:全年必须介于-4713和+9999之间,而不是0 将字符串作为其第一个参数。假设paydate是一种日期数据类型,则要求Oracle将paydate从日期隐式转换为字符串,该字符串将使用NLS_DATE_FORMAT会话参数,然后将其传递到to_DATE函数以将其转换回日期 因此,您的查询实际上是: SELECT * FROM

下面的语句在2019年1月11日抛出一个错误 我们检查paydate的值为20190111,从来源上看是正确的。 但是,代码仍然会抛出一个错误

ORA-01841:全年必须介于-4713和+9999之间,而不是0

将字符串作为其第一个参数。假设paydate是一种日期数据类型,则要求Oracle将paydate从日期隐式转换为字符串,该字符串将使用NLS_DATE_FORMAT会话参数,然后将其传递到to_DATE函数以将其转换回日期

因此,您的查询实际上是:

SELECT   *
FROM     <old_table_name>
WHERE    paydate =TO_DATE(
                    TO_CHAR(
                      paydate,
                      ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
                    ),
                    'YYYYMMDD'
                  );

如果使用的是不带值的Insert命令,则需要将参数的顺序与表结构的顺序完全相同

由于它正在查找一个日期列,您在其中传递字符串或其他内容,因此可能会出现此错误


检查insert命令的列顺序。

如果您所说的是真的,那么Oracle有一个错误。否则,这是正确的,你误解了现实。请将表的描述和示例数据与SQL*Plus会话一起发布,这证明了您的说法。使用相同的描述创建了相同的表,为20190111加载了相同的数据,并且加载得非常完美。不知道那天1月11日的跑步失败了。在过去的同一天,我们有3次运行失败。20160101、20111011和20190111如果我们看到mm和dd值仅包含0和1位数字,则其他运行已成功完成。您正在将一列与其自身进行比较,其中paydate=TO_DATEpaydate,'yyyyymmdd'。您确定您的代码是这样的吗?它是to_date函数中的一个变量。请提供相关详细信息。如果是v_paydate而不是paydate,则对其进行编辑,以便查询有意义,并包括paydate和v_paydate的数据类型。
TO_DATE( date_string, format_model )
SELECT   *
FROM     <old_table_name>
WHERE    paydate =TO_DATE(
                    TO_CHAR(
                      paydate,
                      ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
                    ),
                    'YYYYMMDD'
                  );
SELECT   *
FROM     <old_table_name>
WHERE    paydate = TRUNC( paydate );