首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle to_number函数参数

Oracle to_number函数参数
EN

Stack Overflow用户
提问于 2011-10-26 13:20:28
回答 2查看 3.7K关注 0票数 4

我在使用TO_NUMBER函数的第二个和第三个参数时遇到了问题。它们中的一个依赖于另一个吗?nls_params参数是如何工作的?我不明白查询结果是怎么回事

代码语言:javascript
复制
SELECT TO_NUMBER('17.000,23', 
             '999G999D99', 
             'nls_numeric_characters='',.'' ')  
             REFORMATTED_NUMBER 
FROM   DUAL; 

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

附注:上述查询摘自Oracle Database SQL Expert证书准备一书。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 15:37:52

现在,我将回答我自己的问题。在使用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

票数 1
EN

Stack Overflow用户

发布于 2011-10-26 15:34:21

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

代码语言:javascript
复制
G (thousands seperator) = .
D (decimal seperator)   = ,

所以它认为这个数字是一万七千二十三。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7898953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档