oracle常用函数

159 阅读3分钟

目录

oracle常用函数

一般函数

判断是否全都是数字

case/when

获取两时间的相差豪秒数

instr函数

DECODE函数

判断两个日期间隔几个工作日

遍历查询


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'