如何使用掩码将字符转换为数字

How to convert char to number with mask

我无法将带点的字符符号转换为数字。我遇到异常

ORA-01481 invalid format mask

哪种面膜适合我?我在点之前需要无限数量的字符。 星号或 n 符号不起作用

select to_number('840.11', '*.99') from dual

您可以使用 TRANSLATE 构建一个合适的格式掩码,然后 ROUND(或 TRUNC)转换到您需要的精度的解决方案:

SELECT ROUND(TO_NUMBER('840.1155',TRANSLATE('840.1155', '123456789', '000000000')),2) FROM dual

=> 840.12

to_number 的行为取决于数据库甚至会话设置,因此为了确保按照您需要的方式转换它,您需要提供数字字符,如下所示:

select to_number('840.11', '999.99', ' NLS_NUMERIC_CHARACTERS = ''. ''') from dual

现在如果你在点之前有更多的数字,你可以简单地放大格式掩码,像这样:

select to_number('234234840.11', '99999999999999.99', ' NLS_NUMERIC_CHARACTERS = ''. ''')
from dual

没有直接的方法来指定点前的动态数字数量,但这里描述了某种解决方法: Dynamic length on number format in to_number Oracle SQL