1 用法简介

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

To_number函数的格式如下:

To_number(varchar2 or char,’format model’)

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

格式值 含义
9 代表一个数字
0 强迫0显示
$ 显示美元符号
L 强制显示一个当地的货币符号
. 显示一个小数点
, 显示一个千位分隔符号

2 一些例子

SQL> select to_number(’RMB234234.4350′,’L999999.0000′) from dual;TO_NUMBER(’RMB234234.4350′,’L999999.0000′)——————————————234234.435
SQL> select to_number(’$123,233,455,623.3400′,’$999,999,999,999.0000′) from dual;TO_NUMBER(’$123,233,455,623.3400′,’$999,999,999,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条件:

LENGTH(status) <= 10

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

TO_NUMBER(REGEXP_REPLACE(status,'[^0-9]','')) > 30

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

Oracle中TO_NUMBER()函数的用法相关推荐

  1. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  2. Oracle中to_char()函数的用法

    Oracle中to_char()函数的用法 日期转换: to_char(date,'格式') select to_date('2005-01-01 ','yyyy-MM-dd') from dual; ...

  3. oracle to_char函数格式,oracle 中to_char函数的用法

    一.日期格式转换 to_char(date,'格式'); select to_date('2005-01-01 ','yyyy-MM-dd') from dual; select to_char(sy ...

  4. Oracle中add_months()函数的用法

    Oracle中add_months()函数的用法 查询当前时间n个月以前的时间: select add_months(sysdate,-n) from dual; 查询当前时间n个月之后的时间: se ...

  5. oracle trunc函数 q,oracle中trunc函数的用法

    TRUNC函数返回以指定元素格式截去一部分的日期值. 其具体的语法格式如下: TRUNC(date,[fmt]) 其中: date 为必要参数,是输入的一个日期值 fmt 参数可忽略,是日期格式,用以 ...

  6. oracle 中 to_date 函数的用法

    常犯错的使用方法. to_date('2019-08-12 22:05:','yyyy-MM-dd HH24:mm:ss') Oracle中会引起错误:"ORA 01810 格式代码出现两次 ...

  7. oracle的sql的substr用法,oracle中substr函数的用法(sqlserver right)

    oracle: 语法: substr(string,a,b): a:从第几位开始,第一位a=1,倒数第三位(即sqlserver中的right)a=-3 b:取几个字符 substr('This is ...

  8. oracle中trim函数的用法

    1.基础用法 a) trim(string); --去除字符串首尾的空格 b) rtrim(string); --去除字符串右侧空格 c) ltrim(string); --去除字符串左侧空格 2.进 ...

  9. Oracle中coalesce函数的用法

    学习了几天教主的书,今天看到coalesce函数,功能很强大啊! coalesce函数的参数是列,结果是取出第一个不为空的列的数据. 首先,建一个视图: CREATE OR REPLACE VIEW ...

  10. oracle中的with函数,关于oracle中With函数的用法

    先来一个例子:一列转多行,直接出查询SQL步骤. (PS:一行转多列就不写了,listagg,wm_concat等可以简单实现) (1) SELECT 'AG,YH,PO,LS,GJ' A1, '1' ...

最新文章

  1. 2020校招薪酬大比拼,你被倒挂了没?
  2. dotNet中,取得指定日期所在月份的最后一天
  3. 15支持哪些数据库版本 tfs_我司虚拟主机支持脚本及数据库版本一览表
  4. [云炬创业基础笔记] 第三章测试4
  5. jdbc查看网络状态
  6. Linux下C语言执行过程(预处理,编译,汇编,链接,执行)
  7. ---WebCam网络摄像头7 cmos--yuv rgb , Format............:V4L2_PIX_FMT_YUYV
  8. android 多布局
  9. c语言生成随机的坐标,C语言文件的随机读写
  10. MySQL之一篇读懂binlog redolog undolog
  11. 启动Eclipse 报错:java was started but returned exit
  12. MATLAB局部放大
  13. android usb调试授权,USB调试模式已打开,但没有USB调试授权窗口
  14. 深度学习实战案例:新闻文本分类
  15. 深入理解JAVA中的跨包继承
  16. 生成的包含卫兵:一次替代实用主义
  17. python ---图片转为卡通图
  18. 刘鹏教授在淮安市应急管理局作报告
  19. 服务器远程管理(远程桌面(图形) telnet(命令行))
  20. 前端三剑客 Html Css JavaScript

热门文章

  1. 认识web,web的标准构成和基本元素
  2. PS--用法/快捷键
  3. 阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年
  4. idea用token登陆github_Vue 页面权限控制和登陆验证
  5. 网页在ie内核的浏览器下面整体偏左
  6. VRRP协议 学习笔记
  7. VS2017--如何添加版权声明注释
  8. ubuntu查看系统版本
  9. 怎样使用css动画animation实现静态箭头图片上下摆动
  10. 华为2017年8月30日校招编程真题01-数字的中文拼音和英文单词之间互相转换