首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中使用带固定小数点字符的TO_NUMBER函数实现字符串到数字的转换?

如何在Oracle中使用带固定小数点字符的TO_NUMBER函数实现字符串到数字的转换?
EN

Stack Overflow用户
提问于 2011-04-05 21:10:20
回答 4查看 35.7K关注 0票数 7

我需要在程序中转换从stringdecimal与固定的小数分隔符.独立于文化设置。接下来,我知道十进制数在.之后只有6位小数,在.之前没有位数限制。使用Oracle文档和它的格式化字符串示例,我现在就有了这个解决方案:

代码语言:javascript
复制
v_number := TO_NUMBER(v_string, '9999999999999999999999999999999999D999999', 'NLS_NUMERIC_CHARACTERS = ''. ''');

D之前的9字符数是允许的最大字符数。我发现这个格式字符串非常糟糕。对于这个通用的转换,有没有更好的格式字符串或者省略函数的第二个参数的方法?一般来说,我只需要传递给函数NLS参数,告诉它我只想用十进制分隔符.进行转换,但在这种情况下,第二个参数也是必需的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-05 21:18:21

不能使用第三个参数而不是第二个参数调用to_number函数。我建议将“丑陋的”格式字符串放在一个包常量中,然后忘掉它。

您还可以使用dbms_session.set_nls修改您的NLS设置,并能够使用不带参数的to_number

票数 8
EN

Stack Overflow用户

发布于 2017-12-07 20:34:49

同时处理逗号和句号。

代码语言:javascript
复制
FUNCTION to_number2(p_num_str VARCHAR2) RETURN NUMBER AS
BEGIN
  RETURN TO_NUMBER(REPLACE(p_num_str, ',', '.'), '999999999999D999999999999', 'NLS_NUMERIC_CHARACTERS=''.,''');
END;
票数 1
EN

Stack Overflow用户

发布于 2012-11-05 00:49:08

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION IS_NUMBER(P_VAR IN VARCHAR2)
RETURN NUMBER
IS
  P_NUMBER NUMBER := 0;
  RIG VARCHAR2(10) := '';
  FORMAT VARCHAR2(100) := '999999999999D999999999999';
  RES VARCHAR2(100) := '';
BEGIN
  SELECT VALUE INTO RIG 
  FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS';
IF SUBSTR(RIG,1,1) = '.' THEN
 RES := REPLACE(P_VAR,',','.');
ELSE
 RES := REPLACE(P_VAR,'.',',');
END IF;
 P_NUMBER := TO_NUMBER(RES,FORMAT,'NLS_NUMERIC_CHARACTERS='''||RIG||'''');
 P_NUMBER := ROUND(P_NUMBER,5); --FIVE DIGITS AFTER DECIMAL POINT IS ENOUGH
RETURN P_NUMBER;
EXCEPTION
 WHEN OTHERS THEN RETURN -1;
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5552359

复制
相关文章

相似问题

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