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_CHAR
和TO_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: 无效的数字格式模型的主要内容,如果未能解决你的问题,请参考以下文章