zoukankan      html  css  js  c++  java
  • 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后台开发,热衷分享技术,这是第一篇,看的舒服给个赞,鼓励一下,亲"
      }
    
    读万卷书,行万里路,方能回到内心深处。
  • 相关阅读:
    使用scp进行远程数据传输时避免输入密码(scp without password)
    scons用户指南翻译(附gcc/g++参数详解)
    StringIO 模块用于在内存缓冲区中读写数据
    注意变换的顺序
    为什么static成员必须在类外初始化
    Visual Studio中删除所有空行
    rendering order of skybox
    解决VS中注释乱码的问题
    一道数论题目
    First Chance Exception
  • 原文地址:https://www.cnblogs.com/gss0525/p/6779641.html
Copyright © 2011-2022 走看看