ORA-01481: 无效的数字格式模型

Posted

技术标签:

【中文标题】ORA-01481: 无效的数字格式模型【英文标题】:ORA-01481: invalid number format model 【发布时间】:2020-09-01 11:24:33 【问题描述】:

我试图了解这里发生了什么,但不知何故我不能。无论我一次又一次地尝试,我都会出错。我得到的错误信息是:

ORA-01481: invalid number format model
01481. 00000 -  "invalid number format model"
*Cause:    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.
*Action:   Consult your manual.

到目前为止,我想做的是在这里

SELECT
            A.UserID, 
            A.Surname, 
            A.Lastname,
            A.PersonalNumber,
            A.EmployeeNumber, 
            (SELECT TO_CHAR(SUM(um.Mileage), 1) from user_mileages um 
            INNER JOIN user_timesheets ut 
            ON um.TimesheetId = ut.UserTimesheetsID
            WHERE ut.Date_ BETWEEN '2020-02-24' AND '2020-06-06'
            AND um.UserId = A.UserID ) AS sum_mileage_per_month,
            A.UserTimesheetsID,
            A.User_roleID,
            ROW_NUMBER() OVER(ORDER BY A.UserID) AS RowNumber
         FROM (
         SELECT 
            u.UserID, 
            u.Surname, 
            u.Lastname,
            u.User_roleID,
            u.PersonalNumber,
            u.EmployeeNumber, 
            (um.Mileage),
            ut.UserTimesheetsID
         FROM 
            users  u
         LEFT JOIN 
            user_timesheets  ut 
         ON 
            ut.user_id = u.UserID
         LEFT JOIN
            user_mileages  um
         ON
            (ut.UserTimesheetsID = um.TimesheetId AND ut.user_id = um.UserId)
         WHERE 
            ut.Date_ BETWEEN '2020-02-24' AND '2020-06-06' 
         UNION
            SELECT u.UserID, 
                    u.Surname, 
                    u.Lastname, 
                    u.User_roleID, 
                    u.PersonalNumber, 
                    u.EmployeeNumber, 
                    NULL AS Mileage,
                    NULL AS UserTimesheetsID 
            FROM users  u
         ) A
         ORDER BY A.EmployeeNumber, A.Surname, A.Lastname

到目前为止,错误出现在

(SELECT TO_CHAR(SUM(um.Mileage), 1) from user_mileages um 

这里um.Mileage 字段是浮点数据类型,据我尝试转换为TO_CHARTO_NUMBER 并使用CAST,但到目前为止没有一种解决方案有效。 这里有什么问题?为什么我不能将其转换为 char 或 number ?

【问题讨论】:

【参考方案1】:

你可以试试这个:

SELECT TO_CHAR(SUM(um.Mileage)) FROM table_name;
SELECT TO_NUMBER(SUM(um.Mileage)) FROM table_name;

错误:

SELECT TO_CHAR(SUM(um.Mileage), 1) FROM table_name;
ORA-01481: invalid number format model

【讨论】:

【参考方案2】:

您正在尝试将日期值 ut.Date_ 与 varchar2 值 '2020-02-24' 进行比较。而是将日期类型与日期类型进行比较。

在这种情况下,您可以使用文字并变成ut.Date_ BETWEEN date '2020-02-24' AND date '2020-06-06'。如果您还需要比较中的时间部分,请使用函数 to_date()。

希望这能解决您的问题。

【讨论】:

不,这不是解决方案。还是有问题 你的sql查询中出现了两次这种情况,你改了2次吗?在这两种情况下添加日期文字(上面查询中的第 10 行和第 36 行) 是的,我将其更改了 2 倍,但仍有问题。正如我看到的问题是 (SELECT TO_CHAR(SUM(um.Mileage), 1) 因为我注释了这行代码并返回了数据,但是当我取消注释时我得到错误 to_char( sum( um.Mileage), 1)??你想在这里做什么?不应该只是SELECT TO_CHAR(SUM(um.Mileage))吗? um.mileage 列的数据类型是什么?

以上是关于ORA-01481: 无效的数字格式模型的主要内容,如果未能解决你的问题,请参考以下文章

oracle 提示无效数字

oracle数据库报无效数字?

Kendo UI 数字格式无效的模板

双无效。 android中的数字格式异常

FORG0001:日期无效。非数字组件

kettle报无效数字的错误怎么解决