to_number的以下格式说明符有什么问题?
SELECT TO_NUMBER('0,22', '0,99') * 100 FROM DUAL;
结果是2200而不是22 - 我做错了什么?
答案 0 :(得分:13)
尝试:
TO_NUMBER('0,22', '9D99')
与文字逗号不同,D
仅匹配小数点分隔符。因此,如果失败,您的小数点分隔符可能是.
,而不是,
。
您可以使用此命令查看小数分隔符和千位分隔符:
select value from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS'
如果返回.,
,则逗号为千位分隔符。
要更改单个查询的分隔符,您可以:
select TO_NUMBER('0,22','9D99','nls_numeric_characters=,.') from dual;
答案 1 :(得分:1)
快速猜测: 0.22对0,22(相同于9.99对0,99)