在一次写sql语句的时候,无法达到想要的效果,最后用sign函数和decode函数解决了。在这个过程中简单的学习了一下这两个函数,并总结如下:
1.sign函数:
比较大小的函数:
函数语法
sign(n)
函数说明:
取数字的符号,大于0返回1,小于0返回-1,等于0返回0
可以用于两时间相减来比较大小。
2.decode函数
流程控制函数:
decode函数是Oracle PL/SQL的功能强大的函数之一,目前还只有Oracle公司的sql提供了此函数,其他数据库厂商的sql实现还没有此功能。
decode的语法:decode(value,if1,then1,if2,then2,if3,then3,....,else),表示如果value的值等于if1时,decode函数的结果返回对应的then1,......,如果不等于任何if值,则返回else。
3.numtodsinterval函数
numtodsinterval(x,c):
表明x的单位,这个函数把x转换为interval day to second数据类型
常用的单位有(‘day’,‘hour’,‘minute’,‘second’)。
sql-------------------------------------------查询结果 ----描述
select numtodsinterval(1,'day') from dual---------------- +000000001 00:00:00.000000000 ---------1天
select numtodsinterval(1,'hour') from dual------------- +000000000 01:00:00.000000000 ----------1小时
select numtodsinterval(1,'minute') from dual-------- +000000000 00:01:00.000000000 ----------1分钟
select numtodsinterval(1,'second') from dual---------- +000000000 00:00:01.000000000 ----------1秒钟
如果和时间sysdate结合使用的话
select sysdate+numtodsinterval(1,'hour') from dual------ 2015/10/30 15:00:52 ----在当前时间上加一个小时,其他单位同理。
4.numtoyminterval函数
numtoyminterval(x,c):
与numtodsinterval函数类似,将x转换为interval year to month 数据类型
常用的单位有(‘year’,‘month’)
select numtoyminterval(1,'month') from dual --------- +000000000-01 ----------------- 一个月
select numtoyminterval(1,'year') from dual -------------- +000000001-00 ----------------- 一年
select sysdate+numtoyminterval(1,'month') from dual ---- 2015/11/30 14:14:45 ---- 当前时间上加上一个月
5.substr函数
字符串截取函数:
函数语法:
substr(字符串,截取开始位置,截取长度)//返回的是截取的字符串。
截取开始位置为0和1:表示截取开始位置为第一个字符。
截取开始位置为负数(-i):表示截取的开始位置为字符串右端向左数第i个字符。
案例演示:
select substr('Hello World',0,2) value from dual; ------------------ He ----------描述就都不描述了,看语法已经说的很清楚了。
select substr('Hello World',-0,2) value from dual; ------------------ He
select substr('Hello World',1,2) value from dual; ------------------ He
select substr('Hello World',-1,2) value from dual; ------------------ d
select substr('Hello World',-2,2) value from dual; -------------------- ld
select substr('Hello World',-3,2) value from dual; --------------------- rl