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
四舍六入五双 在统计学方面是比四舍五如更为科学的统计方法,特别是做大量数据统计时。
"四舍六入五双" ---统计实现
名词解释:
四舍六入五双 规则如下:
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 )
);
订阅:
博文 (Atom)