目录
oracle常用函数
一般函数
NVL(E1, E2) :如果E1为null,则返回E2.
coalesce(a,b,c,d) :返回第一个不是null的值。
NVL2(E1, E2, E3):如果E1为null,则返回E3,如果E1不为null,则返回E2.
to_char(a):将a转换为字符类型。
to_number(a):将a转为数字类型。
select replace(lpad('123',5),' ','0') from dual: 前补0
replace(str,' ','') :去空格
length(a) :字符串长度
round(a/b,2) :保留两位小数
where substr(phone,0,3) in ('134','135'); :in模糊查询
To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') :字符串转时间
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
translate('ab你好bcadefg','abcdefg','1234567')
判断是否全都是数字
LTRIM(字段名,'0123456789'),如果字段为纯数字,则返回值为空,如字段含其他字符,则返回非数字的其他字符。
ISNUMERIC(字段名),如果为纯数字,则返回1,否则返回0。
case/when
Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
获取两时间的相差豪秒数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL;
instr函数
a. instr(字段,'关键字') > 0 相当于 字段like '%关键字%': 表示在字符串中包含‘关键字’
b. instr(字段,'关键字') = 1 相当于 字段like '关键字%' 表示以‘关键字’开头的字符串
c. instr(字段,'关键字') = 0 相当于 字段not like '%关键字%' 表示在字符串中不包含‘关键字’
DECODE函数
DECODE是Oracle公司独家提供的功,该函数功能强大,下文对DECODE函数的语法作了详尽的阐述,供您参考学习。
含义解释:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
判断两个日期间隔几个工作日
CREATE OR REPLACE FUNCTION "FUN_BETWEENDAYS"(start_dt date, end_dt date)
RETURN INT IS
t_days INT;
BEGIN
SELECT (TRUNC(end_dt - start_dt) - ((CASE
WHEN (8 - to_number(to_char(start_dt, 'D'))) >
TRUNC(end_dt - start_dt) + 1 THEN
ELSE
trunc((TRUNC(end_dt - start_dt) -
(8 - to_number(to_char(start_dt, 'D')))) / 7) + 1
END) + (CASE
WHEN MOD(8 - to_char(start_dt, 'D'), 7) >
TRUNC(end_dt - start_dt) - 1 THEN
ELSE
TRUNC((TRUNC(end_dt - start_dt) -
(MOD(8 - to_char(start_dt, 'D'), 7) + 1)) / 7) + 1
END)))
INTO t_days
FROM dual;
RETURN t_days;
END FUN_BETWEENDAYS;
遍历查询
select *
from T_SYS_ORG
connect by prior ORGID = PID
start with ORGID = '3701'