oracle各种基本函数查询

来源:互联网 发布:南风知我意琰阙 编辑:程序博客网 时间:2024/05/14 09:39
oracle函数:--数值函数--字符函数--日期函数--转换函数----------------------------------------------数值函数:--四舍五入:--ROUND(n,m)--m>0:小数点后m位  m<0:小数点前m位select round(2222.222), round(2222.222, 1), round(2222.222, -1) from dual--结果:22222222.22220--取整函数--1.ceil(n)取整加1  2.floor(n)取整减1select ceil(2222.222), floor(2222.222) from dual--结果:22232222--常用计算--1.abs(s):取绝对值  select abs(2222.222), abs(-2222.222), abs(0) from dual--结果:2222.2222222.2220--2.mod(m,n)  取余数 m/n的余数,如果m或n为null,结果则为nullselect mod(2222.222,2) from dual--结果:0.222--3.power(m,n)  返回m的n次幂select power(2,3) from dual--结果: 8   (2的三次方)--4.sqrt(n) 求平方根select sqrt(16) from dual--结果:4 --三角函数--sin(n),asin(n),cos(n),acos(n),tan(n),atan(n)----------------------------------------------字符函数:--1.大小写转换函数--upper(char)小写变大写  lower(char)大写变小写  initcap(char)首字母大写select upper('zhanghaochun'), lower('ZHANGhaochun'), initcap('zhanghaochun')  from dual--结果:ZHANGHAOCHUNzhanghaochunZhanghaochun--应用场景:登录时不区分大小写--2.获取子字符串函数--substr(char,m,n)  m:取子串的开始位置  n:截取子串的位数select substr('zhanghaochun', 6, 3) from dual--结果:hao   (从第6个开始截取,截取3个)--3.获取字符串长度函数--length(char)select length('zhanghaochun') from dual--结果:12--应用场景:查找名字超过三个的人的信息--4.字符串连接函数--concat(char1,char2)--与||操作符的作用一样select concat('中华', '人民'), '中华' || '人民' from dual--结果:中华人民中华人民--5.去除子串函数--5.1:trim(c2 from c1)  表示从c1中去除掉 c2 这个字符串select trim('z' from 'zhanghaochun') from dual;--结果:hanghaochun  仅能截取掉一个字符,第一个字符--5.2:ltrim(c1,c2)  从左边去除--5.3:rtrim(c1,c2)  从右边去除--5.4:trim(c1)  去除两边的空格--6.替换函数--replace(char,s_string1,s_string2)   s1:需要替换的内容  s2:替换成什么内容--s_string2为空时,默认用空格替换select replace(' ', 'a', 'A') from dual;--结果:AAbbAAccAAdd    将a换成A----------------------------------------------日期函数:--系统时间--sysdateselect sysdate today from dual;--结果:2017/5/22/周一 15:46:42--日期操作--1.add_months(date,i)   i:想要加上几个月,为整数。如果是小数,则截取整数部分--作用:正数:返回在指定日期上增加几个月份  负数:返回在指定日期上减少几个月份select add_months(sysdate, 3), add_months(sysdate, -3) today from dual;--结果:2017/8/22/周二 15:55:392017/2/22/周三 15:55:39--2.next_day(date,char)--作用:如果char的值是'星期一',则返回date指定日期的下周一是哪天select sysdate, next_day(sysdate, '星期一') from dual;--结果:2017/5/22/周一 16:04:53  2017/5/29/周一 16:04:53--3.last_day(date)--作用:返回所在月的最后一天select sysdate, last_day(sysdate) from dual;--结果:2017/5/22/周一 16:09:142017/5/31/周三 16:09:14--4.months_between(date1,date2)--作用:计算两个日期之间相隔的月份select months_between(add_months(sysdate, 12), sysdate) from dual;--结果:12    等同于两个日期的值直接相减--5.extract(date from datetime)--作用:从datetime里找出date的时间select sysdate,--2017/5/22/周一 16:23:36       extract(year from sysdate),--2017       extract(month from sysdate),--5       extract(day from sysdate)--22  from dual;--结果:2017/5/22/周一 16:23:362017 522--hour minites --统计季度----------------------------------------------转换函数:--1.日期转换成字符--to_char(date,fmt)  date:将要转换的日期  fmt:转换的格式select to_char(sysdate, 'yyyy-MM-dd  HH24:MI:ss') from dual;--结果:2017-05-23  09:37:25--2.字符转换成日期--to_date(char,fmt) char:要转换的字符串  fmt:转换的格式select to_date('2017-05-23', 'yyyy-MM-dd') from dual;--结果:2017/5/23/周二     只会按照系统默认格式显示日期--3.数字转换成字符--to_char(number,fmt)  number:所要转换的数字类型数据  fmt:所要的格式数据select to_char(123456.789, '$999,999.999') from dual--结果: $123,456.789select to_char(123456.789, 'S999,999.999') from dual--结果:+123,456.789--4.字符转换成数字--to_number(char,fmt)  char:想要转换的字符  fmt:想要的格式 select to_number('$1,000','$9999') from dual;--结果:1000--fmt日期格式:--年:YY  YYYY  YEAR--月:MM  MONTH--日:DD  DAY--时:HH24  HH12--分秒:MI  SS--fmt数字转字符格式:--9:显示数字并忽略前面的0--0:显示数字,位数不足,用0补齐--. 或 D:显示小数点--,或 G:显示千位符--$:美元符号--S:加正负号(前后都可以)--其他函数:--nvl(a,b)--如果a为空,则显示b,如果不为空,则显示a--类似于三元运算符select nvl('','数据为空') from dual;--结果:数据为空--场景:--当执行插入数据时,字段约束不能为空,就可以用该函数给一个默认值--DECODE(value,if1,then1,if2,then2,if3,then3,...,else)select decode(100,10,'值是10','30','值为30','50','值为50','10000') from dual;--结果:10000--switch(value){if1:then1;if2:then2;if3:then3;else}--场景:--执行复杂判断的时候可以用到--case when if1 then end1  else default endselect case         when 100 = 10 then          '值为10'         when 100 = 100 then          '值为100'         when 100 = 1000 then          '值为1000'         else          '默认值'       end from dual;--结果:值为100--场景,执行复杂判断时--运用例子(统计符合特定条件的费用信息)sum(case when d.bka432 not in ('101','102') and d.bka078 in('C001','C002','C003') and d.aaa157 = '999' then d.aae019 else 0 end ) BKE108--统筹支付费用