欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle各种基本函数查询

程序员文章站 2024-02-27 23:47:27
...
oracle函数:
--数值函数
--字符函数
--日期函数
--转换函数
----------------------------------------------
数值函数:
--四舍五入:--ROUND(n,m)
--m>0:小数点后m位  m<0:小数点前m位
select round(2222.222), round(2222.222, 1), round(2222.222, -1) from dual
--结果:2222	2222.2	2220


--取整函数
--1.ceil(n)取整加1  2.floor(n)取整减1
select ceil(2222.222), floor(2222.222) from dual
--结果:2223	2222


--常用计算
--1.abs(s):取绝对值  
select abs(2222.222), abs(-2222.222), abs(0) from dual
--结果:2222.222	2222.222	0
--2.mod(m,n)  取余数 m/n的余数,如果m或n为null,结果则为null
select 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
--结果:ZHANGHAOCHUN	zhanghaochun	Zhanghaochun
--应用场景:登录时不区分大小写


--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


----------------------------------------------
日期函数:
--系统时间
--sysdate
select 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:39	2017/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:14	2017/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:36	2017 5	22
--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.789
select 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 end
select 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--统筹支付费用