0
我在使用Oracle将10500.37作为货币转换为10,500.37美元时遇到问题。我目前正在使用Oracle SQL开发人员。转换Oracle中的原始数
这是我做过什么:
SELECT TO_NUMBER( '10500.37', '$ 10,500.37') FROM DUAL;
不知道如何解决这个问题,如果我正确地使用格式模型。希望得到一些帮助!
我在使用Oracle将10500.37作为货币转换为10,500.37美元时遇到问题。我目前正在使用Oracle SQL开发人员。转换Oracle中的原始数
这是我做过什么:
SELECT TO_NUMBER( '10500.37', '$ 10,500.37') FROM DUAL;
不知道如何解决这个问题,如果我正确地使用格式模型。希望得到一些帮助!
你是一个数转换为格式化字符串,所以你需要to_char()
而不是to_number()
(其转化的其他方式)。
这是一个可能的业态模式:
SELECT to_char(10500.37, 'L999G990D00') FROM Dual;
TO_CHAR(1050
------------
$10,500.37
你需要足够的领先9个占位符(和组分隔符)为你将要处理的最高值。
数字格式型号are listed in the documentation。
我用G代表组分隔符(而不是硬编码逗号)和D代表小数点分隔符(而不是硬编码一个句点)。我用L代表当地货币符号。所有这些都依赖于客户端的NLS设置:
alter session set nls_territory='UNITED KINGDOM';
SELECT to_char(10500.37, 'L999G990D00') FROM Dual;
TO_CHAR(10500.37,'L99
---------------------
£10,500.37
alter session set nls_territory='GERMANY';
SELECT to_char(10500.37, 'L999G990D00') FROM Dual;
TO_CHAR(10500.37,'L99
---------------------
€10.500,37
alter session set nls_territory='AMERICA';
SELECT to_char(10500.37, 'L999G990D00') FROM Dual;
TO_CHAR(10500.37,'L99
---------------------
$10,500.37
您可能要使用固定值来代替,对于一些或所有这些,所以你得到的结果相同,无论NLS设置:
alter session set nls_territory='GERMANY';
SELECT to_char(10500.37, '$999,990.00') FROM Dual;
TO_CHAR(1050
------------
$10,500.37
更一般地说,为了使货币符号与会话的NLS参数无关,'to_char()'采用参数''nls_currency =''。当货币符号不是$(因为$可以直接在格式模型中使用,而不是其他符号使用)时,尤其需要此功能。 –
mathguy
工作!非常感谢! – Maha