【问题标题】:Oracle insert query returned error 01843. 00000 - "not a valid month"Oracle 插入查询返回错误 01843。00000 - “不是有效月份”
【发布时间】:2015-03-19 11:56:56
【问题描述】:

我正在尝试执行以下查询。

INSERT INTO X_VW_PRICEPRODUCT_IC
     SELECT * FROM ER_PRICEPRODUCT@link;

IN X_VW_PRICEPRODUCT_IC 我有两列相关的 DATE 数据类型。 ER_PRICEPRODUCT 中有两列的值类似于 01-01-190001-01-1900

当我执行这个 sql 我得到错误01843. 00000 - "not a valid month"

我该如何解决这个问题?

【问题讨论】:

  • @alfasin 这没有选择特定的日期范围。我希望表中的所有内容都复制到其他表中。
  • 没关系。您的问题是尝试使用 varchar 并输入日期。尝试运行 describe X_VW_PRICEPRODUCT_IC 然后 describe ER_PRICEPRODUCT@link 并比较输出。

标签: sql oracle


【解决方案1】:

Oracle 不会自动将 dd-mm-yyyy 或 mm-dd-yyyy 转换为日期。您需要明确使用to_date()。虽然,在insert 中包含列名是个好主意。比如:

insert into X_VW_PRICEPRODUCT_IC(col1, . . . )
    SELECT col1, . . ., to_date(datecol, 'MM-DD-YYYY), . . .
    FROM ER_PRICEPRODUCT@link;

【讨论】:

    【解决方案2】:

    远程表的日期字符串的格式似乎是“dd-mm-yyyy”。因此,您必须为会话更改字符串的日期解释:

    alter session set nls_date_format = 'dd-mm-yyyy';
    

    然后执行你的语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多