2017-02-17 31 views
0

我在使用Oracle将10500.37作为货币转换为10,500.37美元时遇到问题。我目前正在使用Oracle SQL开发人员。转换Oracle中的原始数

这是我做过什么:

SELECT TO_NUMBER( '10500.37', '$ 10,500.37') FROM DUAL;

不知道如何解决这个问题,如果我正确地使用格式模型。希望得到一些帮助!

回答

0

你是一个数转换为格式化字符串,所以你需要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 
+2

更一般地说,为了使货币符号与会话的NLS参数无关,'to_char()'采用参数''nls_currency = ''。当货币符号不是$(因为$可以直接在格式模型中使用,而不是其他符号使用)时,尤其需要此功能。 – mathguy

+0

工作!非常感谢! – Maha