Oracle to_number函数参数

Oracle to_number函数参数,oracle,function,Oracle,Function,我对函数的第二和第三个参数有问题。其中一个依赖另一个吗?nls_params参数是如何工作的?我不明白这个查询的结果如何 SELECT TO_NUMBER('17.000,23', '999G999D99', 'nls_numeric_characters='',.'' ') REFORMATTED_NUMBER FROM DUAL; 可能是17000.23。有人能解释一下上述转换的过程吗 另外,上述

我对函数的第二和第三个参数有问题。其中一个依赖另一个吗?nls_params参数是如何工作的?我不明白这个查询的结果如何

SELECT TO_NUMBER('17.000,23', 
             '999G999D99', 
             'nls_numeric_characters='',.'' ')  
             REFORMATTED_NUMBER 
FROM   DUAL; 
可能是17000.23。有人能解释一下上述转换的过程吗


另外,上述查询取自Oracle数据库SQL专家证书准备书。

您正在告诉
TO_NUMBER
函数, nls数字字符中的两个字符
,.
表示小数点和千位分隔符

G (thousands seperator) = .
D (decimal seperator)   = ,
所以它认为这个数字是一万七千点二十三分


请看:

现在,我来回答我自己的问题。在使用
TO_NUMBER
函数时,我忽略了一个要点,即从
TO_NUMBER
函数得到的任何东西都将是一个数字。一个数字除了小数点和E科学记数法外不包括任何东西。因此17788.99实际上不是一个数字,而是17788.99的字符串表示


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

我想如果您将外部数据加载到表中,您可能会发现TO_NUMBER格式非常方便。是的,我忘了这一点。当然,我们不能在数字字段中插入字符串值。