Oracle中NVL和ROUND

  • 介绍两个比较常用的函数
    • NVL就是当一个栏位值为空,可以赋特定值
    • ROUND 是一个可以保留制定位数的函数

表格和几种情况简述

  • 注:为什么这边SQL语句全部是大写
    • 很简单,我用的工具是Toad,读取SQL的时候,会把小写的转化成大写,一是提高编译效率,一是代码规范。另外,对于数据特别多的表,开发过程中尽量避免,SELECT *,因为这样会做全盘扫描,不能节省开销。
  • SD_GSS
  • 表中的数据如下:
YEAR NO
2015
2017 2
2015 1

NVL

  • 可以用以下两个SQL语句检出出空值
  SELECT NO FROM  SD_GSS WHERE NVL(NO,'0')='0'
  
  SELECT NO FROM  SD_GSS WHERE NO IS NULL
  • 那么问题来了,如何去判断NO栏位不为1的信息,你可能写下面的SQL
  SELECT NO FROM  SD_GSS WHERE NO<>'1'   --结果有两条,但是这只能检索出1条
  • 如果这么写就错了,应该下面的写法
  SELECT NO FROM  SD_GSS WHERE NVL(SN1,'0')<>'1'---只要NVL函数后边赋的值不为1,结果就是两条

ROUND

  • 当你做报表的时候会用到ROUND

*对于这几条简单的数据,下面几种情况会报错

   SELECT 3/NO FROM  SD_GSS
   
   SELECT NO/3 FROM  SD_GSS WHERE NVL(NO,'0')<>'1'
  • 如上两条,一是被除数有问题,而是除不尽,写在代码里会抛出异常,正确的SQL应为如下
   SELECT ROUND(NO/3,4) FROM  SD_GSS WHERE NVL(NO,'0')<>'1'

小结

数据库中值为NULL 的应该被视为一种特殊况,如果进行字符串比较例如<>,就该先将NULL值转化为制定值,而且不影响检索结果

感激

感谢您能在百忙中阅读我的文稿,如有思想交际,不胜荣幸。掌握一门后台语言是很不错的事情,关系型数据库可以是个入门,以后也有提升和发展的空间。

关于作者

  var normalChild = {
    nickName  : "墨客码",
    site : "http://www.cnblogs.com/gss0525/"
    descTarget : "本菜鸟做.net后台开发,热衷分享技术,这是第一篇,看的舒服给个赞,鼓励一下,亲"
  }
读万卷书,行万里路,方能回到内心深处。
原文地址:https://www.cnblogs.com/gss0525/p/6779641.html