最近在读数据库存储过程,或者在xml里写sql时用到数据库函数,笔者觉得有必要总结一下,当然有的函数笔者也很懵逼,不过可以问度娘啊!好了!开始正题。
select nvl(null,1)s from dual;--1 若nvl第一个参数为空或'',则返回第二个元素 select nvl2(null,2,1)s from dual;--1 若nvl2 第一个元素为空或'',则返回第二个元素 select decode('',111,1000,200,2000,0)s from dual;--如果seed为111,则取1000;为200,取2000;其它取0 select instr('lidelinlidelin','i',3,3)s from dual;--13 查找i在字符串从第三个位置起第三次出现的下标 select instr('lidelinlidelin','w',3)s from dual;--0 查找w在字符串从第三个位置起第一次出现的下标 select substr('lidelinlidelin',2,3)s from dual;--ide 截取字符串,从第二个开始,取三个 select length('delin Li') s from dual;--8 查看字符串长度 select lengthb('delin Li') s from dual;--8 查看字符串长度 select ascii('as')s from dual;--97 返回第一个字母的ASCII码 select chr(97)s from dual;--a 函数返回十进制表示的字符 select concat('delin',' Li')s from dual;--delin Li 将字符串拼接 select 'Hello! '||'hello world!' from dual;-- Hello! hello world!字符串连接 select initcap('delin li')s from dual;--Delin Li 将每个单词的第一个字母大写其它字母小写返回。单词由空格,控制字符,标点符号分隔 select lower('LIDELIN')s from dual;-- lidelin 将字母变为小写 select upper('lidelin')s from dual;--LIDELIN 将字母变为大写 select initcap('efg')s from dual; --Efg 将首字母大写 select lpad('lidelin',9,'A')s from dual;--AAlidelin 小于9个字符时左边补A select rpad('lidelin',9,'A')s from dual;--lidelinAA 小于9个字符时右边补A select ltrim('000lidelin','0')s from dual;--lidelin 将左边0取消 select rtrim('lidelin000','0')s from dual;--lidelin 将右边0取消 select trim(' delin Li ')s from dual; --delin Li 将字符串两边空格去掉 select trim(leading 9 from 9998767999) s1,trim(trailing 9 from 9998767999) s2,trim(9 from 9998767999) s3 from dual; -- 8767999 9998767 8767 select replace('lidelin','l','L')s from dual;--LideLin 将字符串中l替换为L select soundex('lidelin')s from dual;--L345 返回字符串参数的语音表示形式 select translate('lidelin','dn','s')s from dual;--liseli 字符串中字符存在于为'dn'中时,替换为对应值,d变为s,n变为空 select round(123.456,1)s from dual;--123.5 小数位保留一位四舍五入 select trunc(123.456,1)s from dual;--123.4 小数保留一位不不进行四舍五入 select mod(9,5)s from dual; --求余 select trunc(65/33)s from dual;-- 1 取整 select ceil(65/60)s from dual;-- 2 取整 select sign(-2.1)s from dual;-- -1 判断数字是否为正数 -1否 select sign(2.1)s from dual;-- 1 判断数字是否为正数 1是 select user from dual;--MTRSCDE 查询当前数据库登陆账户名 select vsize('lidelin')s from dual;--7 返回表达式所需的字节数 select nullif('lidelin','lidelin')s from dual;-- 空 值相等返空,否则返回第一个值 select coalesce('','111','e','lidelin')s from dual;-- 111 返回列表中第一个非空表达式 --日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; -- 2017-12-04 15:02:25 日期转化为字符串 select to_char(sysdate,'yyyy') as nowYear from dual; -- 2017 获取时间的年 select to_char(sysdate,'mm') as nowMonth from dual; -- 12 获取时间的月 select to_char(sysdate,'dd') as nowDay from dual; -- 04 获取时间的日 select to_char(sysdate,'hh24') as nowHour from dual; -- 15 获取时间的时 select to_char(sysdate,'mi') as nowMinute from dual; -- 02获取时间的分 select to_char(sysdate,'ss') as nowSecond from dual; -- 25获取时间的秒 select to_date('2017-12-04 15:02:25','yyyy-mm-dd hh24:mi:ss') as nowTime from dual; -- 2017/12/4 15:02:25 字符串转化为日期 select to_char(sysdate,'yyyy-mm-dd q ww w hh24:mi:ss') as nowTime from dual; -- 2017-12-04 4 49 1 15:07:33 2017年 第四季度,当年第49个周,当月第1个周 15点07分33秒 select to_char(to_date('2017-12-04','yyyy-mm-dd'),'day')s from dual; --星期一 select to_char(to_date('2017-12-04','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American')s from dual; --monday select floor(sysdate - to_date('2017-12-01','yyyy-mm-dd')) days from dual;-- 3 两个日期间的天数 select months_between(to_date('2017-10-01','yyyy-mm-dd'),to_date('2017-12-01','yyyy-mm-dd')) months FROM DUAL; -- -2 两个日期间的月数
由于时间紧促,在这里就总结一下部分常用oracle函数,当然大家觉得那些有必要添加进去的函数,希望朋友们能提出来!如有错误,还望斧正!