加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle中to_number()函数的用法

发布时间:2020-12-12 15:19:31 所属栏目:百科 来源:网络整理
导读:类似于mysql 用cast就可,但要填适当的类型,示例: select cast(11 as unsigned int) /*整型*/ select cast(11 as decimal(10,2)) /*浮点型*/ (1)将char或varchar2类型的string转换为一个number类型的数值, 需要注意的是,被转换的字符串必须符合数值类型格
9 代表一个数字 0 强迫0显示 $ 显示美元符号 L 强制显示一个当地的货币符号 . 显示一个小数点 , 显示一个千位分隔符号

2 一些例子

    
    
  • 1
  • 2
  • 3
  • 4
    • 1
    • 2
    • 3
    • 4
    SQL> select to_number(’RMB234234.4350′,’L999999.0000′) from dual; TO_NUMBER(’RMB234234.0000′) —————————————— 234234.435
    select to_number(’$123,233,102); box-sizing: border-box;">455,102); box-sizing: border-box;">623.3400′,’$999,102); box-sizing: border-box;">999,102); box-sizing: border-box;">999.0000′) from dual;
        TO_NUMBER(’999.0000′)
        ———————————————————-
        1.2323E+11

    3 用法陷阱

    有的时候你会发现,使用了TO_NUMBER()函数并且语法正确,但是Oracle却报“invalid number”的错误,而你在一遍又一遍认认真真检查并确定语句无误之后大呼惊奇,以为TO_NUMBER()函数还有什么可能不知道的用法。其实这很可能是你所查询的数据出现了问题,而非SQL。使用TO_NUMBER()函数的时候,一定要确保所转换字段是可转换为数字的,比如字符串“20151008”是可以转换为数字20151008的,但是字符串“2015-10-08”不可以。如果你的字段中包含了字符串“2015-10-08”,而你还直接使用了TO_NUMBER()函数进行操作的话就会报“invalid number”的错。

    4 逃出陷阱

    如何逃出陷阱呢?

    1 前端校验

    尽量在用户输入的时候进行必要的校验,确保输入的数值就是我们需要的格式。

    2 后台校验

    在后台代码中进行必要的检查,筛选到错误的值并且传给前台合理的提示。

    3 SQL校验

    一旦你的数值进了数据库,问题就变得复杂了。还有一种情况是,数据是历史的,我们不能修改它,但是还要进行必要的查询。这时候就需要在SQL层面做点什么了。假设需要使用TO_NUMBER()函数的字段是varchar2类型的名为“status”。比如,如果非法数据都是比较长的,你可以在SQL中加上长度的校验,即多加一个where条件:

        
        
  • 1
  • LENGTH(status) <= 10

    或者,也可以将非法字符替换掉,,同样是在where中多加一个条件:

        
        
  • 1
  • TO_NUMBER(REGEXP_REPLACE(status,'[^0-9]',0); box-sizing: border-box;">'')) > 30

    实例中REGEXP_REPLACE()将“status”字段中所有非数字的字符替换为空字符,然后再用TO_NUMBER()进行比较就可以啦!

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    类似于mysql


    用cast就可,但要填适当的类型,示例:

    select cast(11 as unsigned int) /*整型*/

    select cast(11 as decimal(10,2)) /*浮点型*/


    (1)将char或varchar2类型的string转换为一个number类型的数值,

    需要注意的是,被转换的字符串必须符合数值类型格式,如果被转换的

    字符串不符合数值型格式,Oracle将抛出错误提示;

    (2)to_number和to_char恰好是两个相反的函数;

    to_number(varchar2orchar,'格式')

    [sql] view plain copy
    1. selectto_number('000012134')fromdual;
    2. selectto_number('88877')fromdual;

    (2)如果数字在格式范围内的话,就是正确的,否则就是错误的;如:

    copy selectto_number('$12345.678','$999999.99')'$999999.999') (3)可以用来实现进制转换;16进制转换为10进制:

    copy

      selectto_number('19f','xxx')selectto_number('f','xx')fromdual;

    1 用法简介

    TO_NUMBER函数()是Oracle中常用的类型转换函数之一,主要是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反。

    To_number函数的格式如下:

       
       
    • 1
    • 1
    To_number(varchar2 or char,’format model’)

    To_number函数中也有很多预定义的固定格式:

    格式值 含义
      推荐文章
        热点阅读