`
提烟而过
  • 浏览: 116228 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle学习(三)——15天Oracle入门

阅读更多

                                                         

                                                Oracle入门(三) 这些常用的函数你有多少不知道?

 

          虽然我不提倡把业务逻辑在sql中处理,但一些简单的业务我认识还是在sql中处理,会让我节省不少功夫与效率,以下就常用的简单函数,有时可以让我们事半功倍,你记住了多少,又用到了多少?

   --数值涵数
  select abs(-100)from dual --返回绝对值
  select sign(100),sign(-100),sign(0)from dual--正数返回1,负数返回-1,0返回0
  select ceil(3.1)from dual --Ceil返回比数值大的最小整数
  select floor(3.1)from dual --floor返回比数值小的最大整数
  select power(2.5,2) from dual --返回power(m,n)m的n次方
  select exp(3)from dual--返回e的3次方
  select mod(35,8)from dual--返回35模8的值
  select round(6388.8413)from dual--四舍五入 默认为小数点
  select round(6388.8413)from dual--四舍五入到小数点后多少位
  select round(6388.8413,2.56)from dual--四舍五入到小数点后多少位其和上面等价
  select round(6388.8413,-2)from dual--四舍五入到小数点前多少位
  select trunc(2343.856)from dual--直接截取数值不四舍五入结果为2343(默认为小数点后0位)
  select trunc(2343.856,2)from dual--直接截取小数点后两位不四舍五入结果为2343.85
  select trunc(2343.856,-2)from dual--直接截取小数点前两位不四舍五入结果为2300
  select sqrt(16)from dual--返回平方根+4
  --三角涵数
  select sin(1.57079) from dual;--SIN(x)返回一个数字的正弦值
  select sin(20),sinh(20) from dual;--SIGH(x)返回双曲正弦的值
  select cos(-3.1415927) from dual;--COS(x)返回一个给定数字的余弦
  select cosh(20) from dual;--COSH(x)返回一个数字反余弦值
  select tan(20),tan(10) from dual;--TAN返回数字的正切值
  select tanh(20),tan(20) from dual;--TANH返回数字n的双曲正切值
  select asin(0.5) from dual;--ASIN(x)给出反正弦的值
  select acos(-1) from dual;-- ACOS(x)给出反余弦的值
  select atan(1) from dual;--ATAN(x)返回一个数字的反正切值
  --字符涵数
  select ascii('a')from dual--返回ascii码
  select chr(97)from dual--由ASCII码返回字符
  select concat('asdasd','ffff')from dual;--连接两个字符串
  select initcap('asd asd')from dual--将首安母大写以空格为分界返回Asd Asd
  select lower ('AAA')from dual --全部返回小写
  select upper('aaa')from dual --全部返回大写
  select length('asdas呵呵')from dual --返回字符的长度,汉字按一个字节计算返回7;
  select lpad('呵呵',10,'*')from dual--lpad(s1,n,s2)在s1左边填写s2直到长度为民时结束
                                     --返回******呵呵此时汉字长度按2个字节计算
  select rpad('呵呵',10,'*')from dual --在右边填写                                  
  select instr('呵呵哈哈呵哈','呵哈',1,2)from dual--instr(s1,s2,m,n)从字符(串)s1的第m个位置开始查找
                                      --处n次出现字符(串)s2的位置返回5;
  select ltrim('abaacd','ac')from dual-- ltrim(s1,s2)从s1左边开始查找第一个不是s2集合中的元素时将s1中左
                                      -- 边含s2的元素去掉返回baacd
  select rtrim('abaacd','ad')from dual--从右边删除返回abaac
  select trim('x'from'xxsda xxdxx asdxx')from dual--从两头删除返回sdaxxdxxasd trim(s1,s2)中s1只能为单字符
  select replace('Hao are you','Hao','Who')from dual--替代replace(s1,s2,s3)其中s3可以省略为空
  select translate('Hao are you','Hao','Who')from dual--功能和replace一样只是其参数不可以省
  select substr('hao are you',3,9)from dual;--从字符串的第三位开始取到第9位返回"o are you"
      
       TRUNC(45.936,2) FROM dual                                     --空格不算,汉字按两个字节计算
 --- 日期涵数
  select sysdate from dual;    --得到系统当前时间
  select add_months(sysdate,3)from dual --当前时间上加3
  select last_day(to_date('2009-08-25','YYYY-MM-DD'))from dual  --当前月的最后一天返回2009-8-31
  select months_between(sysdate,to_date('2009-08-25','YYYY-MM-DD')) from dual
                                            --  months_between(d1,d2) d1>d2?正:负
  select sysdate 当时日期,
  round(sysdate) 最近0点日期,
  round(sysdate,'day') 最近星期日,
  round(sysdate,'month') 最近月初,
  round(sysdate,'q') 最近季初日期,
  round(sysdate,'year') 最近年初日期 from dual;
  select sysdate 当时日期,
  trunc(sysdate) 今天日期,
  trunc(sysdate,'day') 本周星期日,
  trunc(sysdate,'month') 本月初, trunc(sysdate,'q')
  本季初日期, trunc(sysdate,'year') 本年初日期 from dual
  select sysdate 当时日期,
  next_day(sysdate,'星期一') 接下来星期一,
  next_day(sysdate,'星期三') 接下来的星期三,
  next_day(sysdate,'星期四') 接下来星期四,
  next_day(sysdate,'星期五') 接下来星期五,
  next_day(sysdate,'星期六') 接下来星期六,
  next_day(sysdate,'星期日') 接下来星期日 from dual
  
  select sysdate 当前日期,
  next_day(sysdate,'星期一')下个星期一,
  next_day(sysdate,'星期二')下个星期二,
  next_day(sysdate,'星期四')下个星期四,
  next_day(sysdate,'星期日')下个星期天
   from dual
 
  selectextract(hour from timestamp '2001-2-16 2:38:40 ') 小时,
       extract(minute from timestamp '2001-2-16 2:38:40 ') 分钟,
       extract(second from timestamp '2001-2-16 2:38:40 ') 秒,
       extract(day from timestamp '2001-2-16 2:38:40 ') 日,
       extract(MONTH from timestamp '2001-2-16 2:38:40 ') 月,
       extract(YEAR from timestamp '2001-2-16 2:38:40 ') 年 from dual;

  --通用涵数其中expr1,exper2,exper3的类型应该是相同的,若exper2与exper3的类型不相同则exper3会自动转化
    select sal,comm ,sal+nvl(comm,0) from emp --nvl(expr1, expr2),若expr1为空则返回expr1否则返回expr2
    select sal,comm , nvl2(comm,ename,sal) from emp--nvl(expr1,expr2,expr3),expr1为空返回expr3若
                                                   --expr1不为空返回expr2
    select nullif(2,2)from dual--mullif(expr1, expr2)expr1, expr2相等返回null 不相等返回expr1.
  --分组与分组涵数  having必须紧跟group by语句 对分组函数进行过滤只能用having子句不能使用where过滤

2
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics