甲骨文 01481.00000 - "invalid number format model"
Oracle 01481. 00000 - "invalid number format model"
这是我用来获取货币价值的查询。 Nut when concat value getting above 异常。查询是
select to_char(b.balance,'9999.'||d.number_of_decimal_places) from balance b, decimal d
我被这个问题困住了。
如果您有数字 number_of_decimal_places
值,例如 1、2、3 等,那么您正在构建格式模型,例如 '9999.2'
而不是 '9999.99'
。
您可以使用 rpad
或 lpad
:
将该整数值转换为格式模型
select to_char(b.balance,'9999.'||rpad('9', d.number_of_decimal_places, '9'))
from balance b, decimal d
或尾随零:
select to_char(b.balance,'9999.'||rpad('0', d.number_of_decimal_places, '0'))
from balance b, decimal d
如果您有字符串 number_of_decimal_places
值,例如 '9'、'99'、'999' 等,那么您所拥有的串联将起作用,除非您在其中一行中有无效值,这将可以是 9 或 0 以外的任何字符。
这包括您可以在 varchar2
或 char
字段中使用的空格。无论哪种方式,您都可以使用 trim
:
删除那些
select to_char(b.balance,'9999.'||trim(d.number_of_decimal_places))
from balance b, decimal d
但是如果您有任何其他字符,那么您将需要识别并更正那些行中的数据;即使有空格,如果它是 varchar2
列,也最好修复数据。
最好使用新式连接;我没有更改这些示例,因为不清楚您是在做笛卡尔积还是只是省略了连接条件。
如果 number_of_decimals
returns 值类似于 2
那么:
SELECT TO_CHAR( b.balance, RPAD( '9999.', 5 + d.number_of_decimals, '9' ) )
FROM balance b
CROSS JOIN
decimal d
无论出于何种原因,“9999”的串联。||d.number_of_decimal_places 生成无效掩码。我们只能猜测实际的 table 值、空格的存在或其他任何可能导致它正在做的事情的问题。
所以你的解决方案是 运行:
select '9999.'||d.number_of_decimal_places from decimal d
查看您生成的实际格式掩码是什么,并根据需要进行调整。
这是我用来获取货币价值的查询。 Nut when concat value getting above 异常。查询是
select to_char(b.balance,'9999.'||d.number_of_decimal_places) from balance b, decimal d
我被这个问题困住了。
如果您有数字 number_of_decimal_places
值,例如 1、2、3 等,那么您正在构建格式模型,例如 '9999.2'
而不是 '9999.99'
。
您可以使用 rpad
或 lpad
:
select to_char(b.balance,'9999.'||rpad('9', d.number_of_decimal_places, '9'))
from balance b, decimal d
或尾随零:
select to_char(b.balance,'9999.'||rpad('0', d.number_of_decimal_places, '0'))
from balance b, decimal d
如果您有字符串 number_of_decimal_places
值,例如 '9'、'99'、'999' 等,那么您所拥有的串联将起作用,除非您在其中一行中有无效值,这将可以是 9 或 0 以外的任何字符。
这包括您可以在 varchar2
或 char
字段中使用的空格。无论哪种方式,您都可以使用 trim
:
select to_char(b.balance,'9999.'||trim(d.number_of_decimal_places))
from balance b, decimal d
但是如果您有任何其他字符,那么您将需要识别并更正那些行中的数据;即使有空格,如果它是 varchar2
列,也最好修复数据。
最好使用新式连接;我没有更改这些示例,因为不清楚您是在做笛卡尔积还是只是省略了连接条件。
如果 number_of_decimals
returns 值类似于 2
那么:
SELECT TO_CHAR( b.balance, RPAD( '9999.', 5 + d.number_of_decimals, '9' ) )
FROM balance b
CROSS JOIN
decimal d
无论出于何种原因,“9999”的串联。||d.number_of_decimal_places 生成无效掩码。我们只能猜测实际的 table 值、空格的存在或其他任何可能导致它正在做的事情的问题。
所以你的解决方案是 运行:
select '9999.'||d.number_of_decimal_places from decimal d
查看您生成的实际格式掩码是什么,并根据需要进行调整。