0

我有以下查询我收到错误的地方

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'));
4

2 回答 2

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.

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

于 2018-01-23T10:35:30.757 回答
1

采用

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

相反,因为day_idmonth_id都是数字。

如果 day_id 是date格式,您可以进行这样的转换为 char 但情况并非如此。

REC.day_id您可以对as应用 to_char 转换,to_char(REC.day_id)但如果存在no non-numeric character,oraclenumberchar字符串操作(例如substr.

于 2018-01-23T10:36:02.037 回答