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

To_number函数的格式如下:

To_number(varchar2 or char,’format model’)
1
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
1
2
3
4
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
1
2
3
4
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
1
或者,也可以将非法字符替换掉,,同样是在where中多加一个条件:

TO_NUMBER(REGEXP_REPLACE(status,'[^0-9]','')) > 30
1
实例中REGEXP_REPLACE()将“status”字段中所有非数字的字符替换为空字符,然后再用TO_NUMBER()进行比较就可以啦!
---------------------
作者:我是干勾鱼
来源:CSDN
原文:https://blog.csdn.net/dongdong9223/article/details/48972815
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
  2. win10家庭版在线升级到win10专业版
  3. LiveCD DSET日志收集
  4. WPF QuickStart系列之数据绑定(Data Binding)
  5. 应用程序调试工具gdb,王明学learn
  6. HP Web Tours分析
  7. python脚本初探---新手如何直接编写一个hello world模块即可执行的.py文件
  8. Android设置背景图像重复【整理自网络】
  9. android信号强度
  10. [c#]asp.net开发微信公众平台(5)微信图文消息
  11. 阿铭linux笔记
  12. 【Web探索之旅】第三部分第一课:服务器
  13. python中关于文件的读取和写入
  14. 【PAT】B1004 成绩排名
  15. git 常用命令收集
  16. tween 缓动动画
  17. Angular 2基础(一) 环境搭建
  18. File类_删除一个带内容的目录_练习
  19. 自学Zabbix7.1 IT services
  20. java进程占用系统内存高,排查解决

热门文章

  1. Educational Codeforces Round 72
  2. CF809E 【Surprise me!】
  3. 通过时间戳批量删除hbase的数据
  4. spark map函数中使用println无法输出
  5. P3119 [USACO15JAN]草鉴定
  6. avalon里面倒计时功能2
  7. createElement与createDocumentFragment的一些小区别
  8. new HttpClient().PostAsync封装参数
  9. go struct 自定义标签获取
  10. arcgis python 更新日期为随机数