• 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后台开发,热衷分享技术,这是第一篇,看的舒服给个赞,鼓励一下,亲"
      }
    
    读万卷书,行万里路,方能回到内心深处。
  • 相关阅读:
    第四章:Django模型——添加 Event发布会的表 报错
    第四章:Django模型——admin后台管理
    第四章:Django 模型 —— 设计系统表
    第三章:3.9 清除 Google 浏览器中的缓存
    第三章:3.9 关上窗户
    第三章:3.9 引用Django 认证登陆
    第三章:3.8 登陆 Django 默认后台
    降脂食物
    决定孩子人生高度的,不是知识而是这个!
    百万保险
  • 原文地址:https://www.cnblogs.com/gss0525/p/6779641.html
Copyright © 2020-2023  润新知