• oracle函数


    函数分类:数值函数(针对数值类型);字符函数;日期函数;转换函数

    函数的作用:方便数据的统计,方便查询处理结果

    数值函数

    四舍五入:

    ROUND(n,[m])     n:代表需要的字段或数值;m代表取保留小数点前几位或后几位,可要可不要,不要代表取整,m>0代表取小数点后m位,m<0代表取小数点前|m|位

    select round (23.4) ,round(23.45,1),round(23.45,-1) from dual;

               23                 23.5              20

    取整函数:ceil:取最大值;floor:去最小值

    select ceil (23.4) ,floor(23.45) from dual;

             24               23

    常用计算:ABS(n):取绝对值

    select ABS(23.4) ,ABS(-23.45),ABS(0) from dual;

                   23.4          23.4          0

    MOD(M,N)取余,M,N中只要有一个为空,那么结果就为空。

    select mod (5,2) ,mod(null,2) ,mod(5,null)from dual;

                 1           null                    null

    power(m,n)m的 n次幂

    select power (5,2) ,power(null,2) ,power(5,null)from dual;

                   25               null                1

    sqrt(n):n的开根号

    select sqrt(16)  from dual;

              4

    三角函数:SIN(N):正弦;  ASIN(N):反正弦;   COS(N) 余弦;ACOS(N) 反余弦;TAN (N):正切;ATAN(N)反正切

    字符函数

    大小写转换:upper(n)小写转大写;lower(n)大写转小写;initcap(n):首字母转为大写

    select upper(abc)  ,lower(ADV),initcap(abc) from dual;

               ABC              adv          Abc

    获取子字符串函数:substring(目标字符串或字段,其实位置[m],长度[n])

    获取字符串长度函数:lenght(字符串或是字段)

    select length ('acb') from dual;

                4

    字符串连接函数:concat(char1,char2)与||操作符的作用一致。

    select concat ('ac','bd') from dual;

                     acbd

    去除字串函数:trim(要去除的字符(只能是一个)from 总字符串)   前者为空则代表去除总字符串的空格 Ltrim(c1,[c2])Rtrim(c1,[c2])

    select trim('a' from 'adbc') from dual

                      bdc

    替换函数:replace(总字符串,需要被替换的,[新的])

    select replace (‘abcd’,'a','A') from dual;

                            Abcd

    日期函数

    日期函数:系统时间;日期操作

    系统时间:SYSDATE:默认格式:DD-MON-RR

    SELECT  SYSDATE FROM DUAL;

                  10-1月-17

    日期操作:

    ADD_MONTHS(date,i):返回指定日期基础上增加i个月份后的时间;i可以是任何正数,若为小数那么只取整数部分,若为负数,则相当于原日期基础上减去月份

    select ADD_MONTHS(sysdate,3) from dual;

                         10-4月-17

    NEXT_DAY(DATE,CHAR):指定日期的下一char是哪一天

    select NEXT_DAY(sysdate,‘星期一’) from dual;

    LAST_DAY(date):指定日期本月的最后一天是哪一天

    select LAST_DAY(sysdate) friom dual;

              31-1月-17

    MONTH_BETWEEN(date1,date2):表示两个日期之间的月份

    select MONTHs_BETWEEN(sysdate,'20170322') from dual;

    EXTRACT(date FROM datetime):返回datetime的date部分

    select EXTRACT(year FROM sysdate) from dual;

                              2017

    select EXTRACT(month FROM sysdate) from dual;

                              1

    select EXTRACT(day FROM sysdate) from dual;

                              10 

    转换函数

    转换函数:日期--字符:to_char(需要转换的日期,转换之后的格式:默认格式:DD-MON-RR,转换后:YY YYYY YEAR;MM MONTH;DD DAY;HH24  HH12;MI SS;日期的语言)

    SELECT  TO_CHAR(SYSDATE ,'YYYY-MM-DD  HH24:MI:SS') FROM DUAL;

                  字符--日期:TO_DATE(字符串,格式)

    select to_date(’21050522‘,‘yyyy-mm-dd’) from dual;

                  数字--字符

    select to_char (‘12345.678','$99.999.999') from dual;

                          $12,345.678

    select to_char (’12345.678','S99.999.999') from dual;

                          +12,345.678

                  字符--数字:to_numer(字符,格式)

    select to_number ('¥1.000',‘$9999') from dual;

                             1000

    在查询语句中使用函数:

    根据员工的身份证号码查处员工生日:

    select substr(idcard,7,8)shengri from emp;

    select replace(no,'01','信息技术')  from   dept;

    select mod(age,10) from emp;

    select extract(yaer from regdate) from users;

    select * from usrs where extract(month  from regdate)  = '5';

    rank () OVER (PARTITION BY 列名 ORDER BY 列名排序)使用分区方式获取每门课程的最高分 SELECT * FROM (SELECT scoreid, studentid, coursename, TOTALEXAMSCORE, rank () OVER (PARTITION BY coursename ORDER BY TOTALEXAMSCORE DESC)orderbynum FROM cj_scorecourse a, cj_coursescore b WHERE a.scorecourseid = b.scorecourseid and studentID = '62000DA50FC14C7FE040007F01002A63') WHERE orderbynum < 2

     rank()over(order by 列名排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4

    dense_rank()over(order by 列名排序)的结果是连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果如:1 1 1 2

    select *
    (select name,rank() over(partition by class order by score desc ) seq,class ,score
    from t

    where seq<=3

    select 
    rank() over(partition by a.class order by b.score desc ) seq,a.class ,b.score
     from student a
    inner join score b
    on a.id=b.id where seq<=2
  • 相关阅读:
    玩个JAVA爬虫,没想玩大
    利用 Ruoyi 开发自己的业务管理系统__测试结构完成
    Vmware 和 VisualSVN-Server端口冲突
    Ruoyi的确不错,不知后续能否坚持 允许商用
    张勇:海底捞店长最高年薪600万!
    自己安装windows版本的Flink
    windows平台上运行Flink_转载于CSDN
    洛谷P3980 [NOI2008]志愿者招募
    线段树优化连边
    [HNOI2013]题解
  • 原文地址:https://www.cnblogs.com/shanshanliu/p/6269064.html
Copyright © 2020-2023  润新知