- 介绍两个比较常用的函数
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后台开发,热衷分享技术,这是第一篇,看的舒服给个赞,鼓励一下,亲"
}