ORA-01481:oracle插入查询中的无效数字格式模型

时间:2018-01-23 10:27:21

标签: sql oracle date insert ora-01481

我在下面查询我的错误

ORA-01481: invalid number format model
The user is attempting to either convert a number to a string via TO_CHAR or a string
to a number via TO_NUMBER and has supplied an invalid number format model parameter.

我在存储过程中使用此查询。 day_id列是数字数据类型,此列中存储的值为YYYYMMDD。 month_id列也是数字数据类型,我想将此列中的值存储为YYYYMM

INSERT INTO TEST_CHECK(MONTH_ID) VALUES
 (to_char(REC.day_id, 'YYYYMM'));

2 个答案:

答案 0 :(得分:3)

您正在将转化应用于数字,就好像它是一个日期一样,尝试将结果(字符串)用作数字。

SQL> create table TEST_CHECK(MONTH_ID number);

Table created.

SQL> INSERT INTO TEST_CHECK(MONTH_ID) VALUES(to_char(20180101, 'YYYYMM'));
INSERT INTO TEST_CHECK(MONTH_ID) VALUES(to_char(20180101, 'YYYYMM'))
                                                             *
ERROR at line 1:
ORA-01481: invalid number format model

您可能需要以下内容:

SQL> INSERT INTO TEST_CHECK(MONTH_ID) VALUES(substr(to_char(20180101), 1, 6));

1 row created.

我记得以这种方式存储日期和月份并不是一个好主意。

答案 1 :(得分:1)

使用

INSERT INTO TEST_CHECK(MONTH_ID) VALUES
 (substr(REC.day_id, 1, 6));

相反,因为day_idmonth_id都是数字。

如果day_id为date格式,您可以将此转换为char,但事实并非如此。

您可以将REC.day_id的to_char转换应用为to_char(REC.day_id),但如果有no non-numeric character,则在字符串操作期间,oracle会在没有to_char的情况下隐式地将number视为char例如substr