页面

2015年7月23日星期四

一条sql实现两个时间相减后显示天数-小时-分钟-秒


朋友遇到这样的问题,让我帮忙写的一个sql,其实很简单,贴出了供大家参考:
with minus_sec as (select
ceil((to_date('2011/02/24 10:00:00','yyyy/mm/dd hh24:mi:ss')-
to_date('2011/1/29 22:30:00','yyyy/mm/dd hh24:mi:ss'))*24*60*60) sec
from dual)    ---把两个日期相减转换成秒数,由于两个日期相减默认是天数,小于一天的用小数表示,所以为了准确转换用ceil函数取比其大的最小整数。
select
  trunc(sec/(60*60*24)) days,   ---除以1天的秒数取整就得到天数
  trunc(mod(sec,60*60*24)/(60*60)) hours,  --针对一天的秒数取模 得到的秒数就是不足一天的秒数,然后除以3600取整得到小时
  trunc(mod(sec,60*60)/60) mis,  ---针对一小时秒数取模,得到的就是不足一小时的秒数,然后除以60取整得到分钟
  mod(sec,60) sec           --针对一分钟的秒数取模,得到的是不足一分钟的秒数,得到秒
from minus_sec;

Oracle PL/SQL方法实现四舍六入五双

/*
                 "四舍六入五双" ---统计实现
名词解释:
  四舍六入五双 规则如下:
  1. 被修约的数字小于5时,该数字舍去;
  2. 被修约的数字大于5时,则进位;
  3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,
    若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后
面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。

举例:
   9.8249=9.82, 9.82671=9.83
   9.8350=9.84, 9.8351 =9.84
   9.8250=9.82, 9.82501=9.83

四舍六入五双 在统计学方面是比四舍五如更为科学的统计方法,特别是做大量数据统计时。

2015年7月20日星期一

oracle 字符串字段分成多个字段后创建视图

/**
情景:某表有一字段为字符串类型,字段中有1~2个英文分号或者中文的分号
      现要根据该字段的分号把该字段划分为2~3个字段,并组成与表中其他字段组成视图。
     
解决方法:
      1)创建table类型,table记录类型跟视图记录类型一样,然后创建返回该table类型的方法。
         方法用于处理str字段,将其分成多个字段,然后生成table记录类型的数据,并填充table,
         最后将数据返回。
         创建视图时直接根据方法返回的table来创建视图。
        
      2)直接用select创建视图,配合case when。
个人推荐使用方法2.
**/

-----------------------------------创建例子用表------------------

create table test_3(
V_NAME VARCHAR2( 10),                       
STR    VARCHAR2(100 )
);