oracle nvl,to_char 函数(二)

   ----------数据表中的null

   如果含有null值,需要特别注意

    1.在计算表达式中,如果某列的值为空,则计算的结果都为空。

       select  monthSal*12+奖金 as yearMoney from emp;

       如果某个人没有奖金,此行值为null,则 yearMoney 为空。

      解决方案使用 滤空函数 nvl: monthSal*12+nvl(奖金,0) as yearMoney from emp;

    2. 判断是否为空 用 is null / is not null

  -----------关于distinct

    distinct如果作用于多列,只有多列值全部相同时,才会被认为相同

  

  在这里我要介绍一下很重要的函数,转换函数 to_char();

  用命令 select sysdate from dual 可以得到系统时间 2012/2/26。在oracle中日期格式默认是是yyyy-dd-mm,因此有些不符合中国人的yyyy-mm-dd习惯,如何修改,用to_char,即 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual,得到

2012-02-26 10:35:15,其中的hh24表示24小时制,hh12表示的是12小时制。有add_month(,dn),last_day(n)几个日期函数,这在做报表的时候特别有用的。

  to_char()不仅可以转换日期,还可以转换薪水,to_char(columnName,'L99999.99'),L99999.99中的L表示本地货币,前面5个9表示小数点前有5个位数,不足的不显示,小数点后面2个9表示两位小数。其中L可以被C(国际货币符号)、$(美元)。具体用法可以查看其他资料,太多了。

  在微软的SQL Server 也有类似的函数,为了便于自己学习,也总结了一下,对照学习有好处

select upper('abc') 
select power(3,3) ---27 a的b次方
select round(3.513,2)
select substring('abc',1,2)  ---截取字符串长度
select len('avbc') --获得字符串长度

select getdate()
select dateadd(d,3,getdate()) --在时间上加上几天,其中d可以换成yy,m等
select year(getdate()) --获得年份
select day(getdate())  --获得天
select month(getdate()) --获得月份
select convert(nvarchar(100),getdate(),111);  ---2012/02/28 转换函数,其中,111是可以改变的,可以看参考文章 

   接下里是oracle中一些常用的字段类型,这都是很基础的啦!

 char:字符类型,虽然比较占用空间, 但效率很高,查询速度极快,因为是整个匹配,常用于存放长度一定的数据,比如身份证,学号。

   varchar2: 变长字符类型,虽然节约空间,但查询速度比较慢,可以存放文章、新闻等等。

   number:数字类型之一,最大值的是10的38次方,如果是number(5,2)则表示的是该数字 5位有效数,2位小数,如果是number(5) 表示一个五位有效数字的整数。事件类型date,起哄timestamp是对date的扩展。blob 是用来存储二进制数据,如图片、声音,但通常我们是用来存储这些数据的地址的,如果这些图片声音特别重要,我们则可以直接存放在数据库中。

原文地址:https://www.cnblogs.com/xianrongbin/p/2368462.html