如何使用掩码将字符转换为数字
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
我无法将带点的字符符号转换为数字。我遇到异常
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