Oracle to_number函数参数
我对函数的第二和第三个参数有问题。其中一个依赖另一个吗?nls_params参数是如何工作的?我不明白这个查询的结果如何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。有人能解释一下上述转换的过程吗 另外,上述
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格式非常方便。是的,我忘了这一点。当然,我们不能在数字字段中插入字符串值。