Oracle to_number函数参数

时间:2011-10-26 05:20:28

标签: oracle function

我在使用TO_NUMBER函数第二个和第三个参数时遇到问题。其中一个是否依赖另一个? nls_params参数如何工作?我无法理解查询结果如何

SELECT TO_NUMBER('17.000,23', 
             '999G999D99', 
             'nls_numeric_characters='',.'' ')  
             REFORMATTED_NUMBER 
FROM   DUAL; 

可以是17000.23。有人可以解释一下上述转换的过程。

P.S。以上查询来自Oracle数据库SQL专家证书准备书。

2 个答案:

答案 0 :(得分:5)

你告诉TO_NUMBER函数, nls_numeric_characters中的两个字符,.表示小数和千位分隔符

G (thousands seperator) = .
D (decimal seperator)   = ,

所以它看到这个数字是17000点二十三。

请参阅:http://download.oracle.com/docs/cd/B13789_01/olap.101/b10339/x_stddev022.htm#i78653

答案 1 :(得分:1)

现在,我将回答我自己的问题。在使用TO_NUMBER函数时,我错过了重要的一点,无论从TO_NUMBER函数获得什么,都将是一个数字。并且数字不包括小数点和E科学符号以外的任何内容。所以17,788.99实际上不是一个数字,而是17788.99的字符串表示。

如果我们试图从17,788.99减去500,我们就会失败。(好吧,Oracle隐式地将数字字符串转换为数字,反之亦然,但主要是我们不能在字符串和数字之间执行算术运算)。我确信TO_NUMBER函数几乎从不用于选择列值。它习惯于能够进行算术运算。相反,我们使用TO_CHAR以简洁易读的格式显示列值或任何数值表达式。 fomat模型和nls_params不仅适用于TO_NUMBER函数,也适用于TO_CHAR