Oracle常用单行函数

标签: sql  Oracle  函数

单行函数:每处理一条记录返回一条结果.


字符函数

  • LOWER    :    转小写
    SQL> select lower(ename) from emp;
    
    LOWER(ENAME)
    --------------------
    smith
    allen
    ward
  • UPPER   :    转大写
    SQL> select upper(ename) from emp;
    
    UPPER(ENAME)
    --------------------
    SMITH
    ALLEN
    WARD
  • INITCAP    :    首字母大写
    SQL> select initcap(ename) from emp;
    
    INITCAP(ENAME)
    --------------------
    Smith
    Allen
    Ward
  • SUBSTR(a,b)    :    从b开始截取字符串a
    SQL> select substr('hello world',4) from dual;
    
    SUBSTR('HELLOWOR
    ----------------
    lo worle
  • SUBSTR(a,b,c)    :    从a字符串的第b位开始截取c长度的字符串
    SQL> select substr('hello world',4,5) from dual;
    
    SUBSTR('HE
    ----------
    lo wo
  • LENGTH(string)     :    字符长度
    SQL> select length('hello world') from dual;
    
    LENGTH('HELLOWORLD')
    --------------------
                      11
  • LENGTHB(string)    :    字节长度
    SQL> select lengthb('你好') from dual;
    
    LENGTHB('你好')
    ---------------
                  6
    
    SQL> select length('你好') from dual;
    
    LENGTH('你好')
    --------------
                 2
  • INSTR(a,b)    :    在a中查找b 没有找到返回0
    SQL> select instr('hello world','d') from dual;
    
    INSTR('HELLOWORLD','D')
    -----------------------
                         11
    
    SQL> select instr('hello world','a') from dual;
    
    INSTR('HELLOWORLD','A')
    -----------------------
                          0

  • LPAD(a,b,c)    :    左填充(给a的左边填充c知道满足b长度)
    SQL> select lpad('hello world',20,'*') from dual;
    
    LPAD('HELLOWORLD',20,'*')
    ----------------------------------------
    *********hello world
    
  • RPAD(a,b,c)    :    右填充
    SQL> select rpad('hello world',20,'*') from dual;
    
    RPAD('HELLOWORLD',20,'*')
    ----------------------------------------
    hello world*********
  • TRIM(a,from,b)    :   去除指定字符(从b中去除a)  
    SQL> select trim('h'from'hello world') from dual;
    
    TRIM('H'FROM'HELLOWO
    --------------------
    ello world
  • REPLACE(a,b,c)    :    替换指定字符(将字符串中a中的b替换为c)
    SQL> select replace('hello world','l','*') from dual;
    
    REPLACE('HELLOWORLD','
    ----------------------
    he**o wor*d

数值函数

  • ROUND(a,b)    :    四舍五入(保留a的b位小数)
    SQL> select round(4523.1354,2) 保留两位小数,round(4523.1354,0) 保留整数,round(4523.1354,-2) 保留百位  from dual;
    
    保留两位小数   保留整数   保留百位
    ------------ ---------- ----------
         4523.14       4523       4500
  • TRUNC(a,b)    :    截取
    SQL> select trunc(4523.1354,2)截取保留两位小数,trunc(4523.1354,0) 截取整数,trunc(4523.1354,-2) 截取百位  from dual;
    
    截取保留两位小数   截取整数   截取百位
    ---------------- ---------- ----------
             4523.13       4523       4500
  • MOD(a,b)    :    求余(a%b)
    SQL> select mod(1520,30) from dual;
    
    MOD(1520,30)
    ------------
              20

日期函数

  • Oracle中的日期
    SQL> select sysdate from dual;
    
    SYSDATE
    --------------
    15-11月-17
    
    SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
    
    TO_CHAR(SYSDATE,'YYY
    --------------------
    2017-11-15
    
    SQL> select to_char(sysdate,'yyyy-mm-dd-hh24-mi-ss') from dual;
    
    TO_CHAR(SYSDATE,'YYYY-MM-DD-HH24-MI-SS
    --------------------------------------
    2017-11-15-09-48-47
  • 时间的加减(两个时间类型可以相减但是不能相加)
    SQL> select (sysdate-1) 昨天,sysdate 今天 ,(sysdate+1) 明天 from dual;
    
    昨天           今天           明天
    -------------- -------------- --------------
    14-11月-17     15-11月-17     16-11月-17
  • MONTHS_BETWEEN(a,b)    :    两个日期相差的月数(a-b)
    SQL> select months_between(sysdate,hiredate) from emp;
    
    MONTHS_BETWEEN(SYSDATE,HIREDATE)
    --------------------------------
                          442.948817
                          440.852043
                          440.787527
                          439.432688
                          433.593978
  • ADD_MONTHS(a,b)    :    给日期a加b月
    SQL> select add_months(sysdate,3) from dual;
    
    ADD_MONTHS(SYS
    --------------
    15-2月 -18
    
    SQL> select add_months(sysdate,-3) from dual;
    
    ADD_MONTHS(SYS
    --------------
    15-8月 -17
  • LAST_DAY(day)     :    某个日期当前月的最后一天
    SQL> select last_day(sysdate) from dual;
    
    LAST_DAY(SYSDA
    --------------
    30-11月-17
  • NEXT_DAY(a,b)    :    a日期的下一个星期b
    SQL> select next_day(sysdate,'星期一') from dual;
    
    NEXT_DAY(SYSDA
    --------------
    20-11月-17
    
    SQL> select next_day(sysdate,'星期五') from dual;
    
    NEXT_DAY(SYSDA
    --------------
    17-11月-17
  • ROUND(a,b)    :    a日期保留b,四舍五入,TRUNC同理
    SQL> select round(sysdate,'month') from dual;
    
    ROUND(SYSDATE,
    --------------
    01-11月-17
    
    SQL> select round(sysdate,'year') from dual;
    
    ROUND(SYSDATE,
    --------------
    01-1月 -18
    
    SQL> select round(sysdate,'day') from dual;
    
    ROUND(SYSDATE,
    --------------
    12-11月-17

转换函数

  • TO_CHAR(data,'format_model')
    SQL> select to_char(sysdate,'dy') 星期几  from dual;
    
    星期几
    ------------------------
    星期三
    
    SQL> select to_char(sysdate,'day') 第几天  from dual;
    
    第几天
    ------------------------
    星期三
    
    SQL> select to_char(sysdate,'month') 第几月  from dual;
    
    第几月
    ----------------
    11月
    
    SQL> select to_char(sysdate,'yyyy') 第几年  from dual;
    
    第几年
    --------
    2017
    
    SQL> select to_char(sysdate,'year') 第几年  from dual;
    
    第几年
    --------------------------------------------------------------------------------
    twenty seventeen
    
    SQL> select to_char(sysdate,'mm') 第几月  from dual;
    
    第几
    ----
    11

    SQL> select sal from emp;
    
           SAL
    ----------
           800
          1600
          1250
          2975
          1250
          2850
          2450
          3000
          5000
          1500
          1100
    
           SAL
    ----------
           950
          3000
          1300
    
    已选择14行。
    
    SQL> select to_char(sal,'L99,999.99') from emp;
    
    TO_CHAR(SAL,'L99,999.99')
    ----------------------------------------
               ¥800.00
             ¥1,600.00
             ¥1,250.00
             ¥2,975.00
             ¥1,250.00
             ¥2,850.00
             ¥2,450.00
             ¥3,000.00
             ¥5,000.00
             ¥1,500.00
             ¥1,100.00
    
    TO_CHAR(SAL,'L99,999.99')
    ----------------------------------------
               ¥950.00
             ¥3,000.00
             ¥1,300.00
    
    已选择14行。
    注:L为本地货币符号,“,”为千位符,“.”为小数,“9”为精度

  • TO_NUMBER(data,'format_model')
    SQL> select to_number(sal,'L99,999.99') from (select to_char(sal,'L99,999.99') sal from emp s);
    
    TO_NUMBER(SAL,'L99,999.99')
    ---------------------------
                            800
                           1600
                           1250
                           2975
                           1250
                           2850
                           2450
                           3000
                           5000
                           1500
                           1100
    
    TO_NUMBER(SAL,'L99,999.99')
    ---------------------------
                            950
                           3000
                           1300

通用函数

  • NVL(a,b)    :    滤空(当a为null时返回b)
    SQL> select nvl(comm,0) from emp;
    
    NVL(COMM,0)
    -----------
              0
            300
            500
              0
           1400
  • NVL2(a,b,c)    :    类型VAL(a,b) 当a为空时返回c否则返回b
    SQL> select nvl2(comm,comm,0) from emp;
    
    NVL2(COMM,COMM,0)
    -----------------
                    0
                  300
                  500
                    0
  • NULLIF(a,b)    :    当a=b时返回null 否则返回a
    SQL> select nullif(1500,1500) from dual;
    
    NULLIF(1500,1500)
    -----------------
    
    
    SQL> select nullif(1500,160) from dual;
    
    NULLIF(1500,160)
    ----------------
                1500
  • COALESCE(expr1,expr2,....)       :      从左到右找到第一个不为空的值否则返回空
    SQL> select coalesce(null,1,null,2) from dual;
    
    COALESCE(NULL,1,NULL,2)
    -----------------------
                          1
    
    SQL> select coalesce(null,null,null,2) from dual;
    
    COALESCE(NULL,NULL,NULL,2)
    --------------------------
                             2
    
    SQL> select coalesce(null,null,null,null) from dual;
    
    C
    -

条件表达式

  • CASE表达式(SQL99语法,较为繁琐)
    SQL> select ename,job,sal 涨前 ,
      2  case job when 'PERSIDENT' then sal+1000
      3  when 'MANAGER' then sal+800
      4  else sal+500
      5  end 涨后
      6  from emp;
    
    ENAME                JOB                      涨前       涨后
    -------------------- ------------------ ---------- ----------
    SMITH                CLERK                     800       1300
    ALLEN                SALESMAN                 1600       2100
    WARD                 SALESMAN                 1250       1750
    JONES                MANAGER                  2975       3775
    MARTIN               SALESMAN                 1250       1750
    BLAKE                MANAGER                  2850       3650
    CLARK                MANAGER                  2450       3250
    SCOTT                ANALYST                  3000       3500
    KING                 PRESIDENT                5000       5500
    TURNER               SALESMAN                 1500       2000
    ADAMS                CLERK                    1100       1600
    
    ENAME                JOB                      涨前       涨后
    -------------------- ------------------ ---------- ----------
    JAMES                CLERK                     950       1450
    FORD                 ANALYST                  3000       3500
    MILLER               CLERK                    1300       1800
    
    已选择14行。
  • DECODE函数(Oracle语法,较为简洁)
    SQL> select ename,job,sal 涨前,
      2  decode(job,'PERSIDENT',sal+1000,
      3  'MANAGER',sal+800,
      4  sal+400) 涨后
      5  from emp;
    
    ENAME                JOB                      涨前       涨后
    -------------------- ------------------ ---------- ----------
    SMITH                CLERK                     800       1200
    ALLEN                SALESMAN                 1600       2000
    WARD                 SALESMAN                 1250       1650
    JONES                MANAGER                  2975       3775
    MARTIN               SALESMAN                 1250       1650
    BLAKE                MANAGER                  2850       3650
    CLARK                MANAGER                  2450       3250
    SCOTT                ANALYST                  3000       3400
    KING                 PRESIDENT                5000       5400
    TURNER               SALESMAN                 1500       1900
    ADAMS                CLERK                    1100       1500
    
    ENAME                JOB                      涨前       涨后
    -------------------- ------------------ ---------- ----------
    JAMES                CLERK                     950       1350
    FORD                 ANALYST                  3000       3400
    MILLER               CLERK                    1300       1700
    
    已选择14行。


版权声明:本文为Mr_PH原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mr_PH/article/details/78537103

智能推荐

Reflect反射的基础知识

写个父类: 写个子类: 利用反射获得该子类中的属性,方法,构造,父类及接口: 运行结果:...

spring cloud netflix (07) 服务的消费者(feign)

前言 完整知识点:spring cloud netflix 系列技术栈 Feign (同步通信 HTTP通信) feign是基于接口完成服务与服务之间的通信的 搭建Feign服务 项目结构 项目搭建 pom.xml application类 application.yml 使用feign完成服务与服务之间的通信 feign是基于接口完成服务与服务之间的通信的...

AtCoder Beginner Contest 174 E.Logs

AtCoder Beginner Contest 174 E.Logs 题目链接 到最后才发现是二分,菜菜的我/(ㄒoㄒ)/~~ 我们直接二分 [1,max{a[i]}][1,max\lbrace a[i]\rbrace][1,max{a[i]}] 即可,对每一个 midmidmid,每个数 a[i]a[i]a[i] 只需要切 a[i]−1mid\frac{a[i]-1}{mid}mi...

小程序基础与实战案例

小程序开发工具与基础 小程序开发准备: 申请小程序账号( appid ) 下载并安装微信开发者工具 具体步骤如下: 先进入 微信公众平台 ,下拉页面,把鼠标悬浮在小程序图标上 然后点击 小程序开发文档 照着里面给的步骤,就可以申请到小程序账号了。 然后就可以下载 开发者工具 了 下载完打开后的界面就是这个样子 下面让我们来新建一个小程序开发项目: 在AppID输入自己刚刚注册的AppID就可以,或...

VMware centOS7 下通过minikube部署Kubernetes

1、环境准备: VMware CentOS-7-x86_64 CPU:2*2core 内存:8G 宿主机和虚拟机需网络互通,虚拟机外网访问正常 Centos发行版版本查看:cat /etc/centos-release root用户操作 2、禁用swap分区 Kubernetes 1.8开始要求关闭系统的Swap,可暂时关闭或永久禁用, 使用 $ free -m 确认swap是否为开启状态 $ s...

猜你喜欢

逻辑回归与scikit-learn

欢迎关注本人的微信公众号AI_Engine LogisticRegression 算法原理 一句话概括:逻辑回归假设数据服从伯努利分布,通过极大化似然函数(损失函数)的方法,运用梯度下降或其他优化算法来求解参数,来达到将数据二分类的目的。 定义:逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性(不是概率)。比如某用户...

指针OR数组?用他们来表达字符串又有何不同?

cocowy的编程之旅 在学习C语言的过程中我们经常可以看到或者听到这样一句话:数组其实等价于指针,例如: 在这里可以轻松的看出输出后他们的值相等,其实在计算机内存里面,p为本地变量,有着他自己的作用域。而指针变量q保存着这个数组的首地址,通过*号指向这个地址保存的变量值。 然而我们再看一个例子: 这个时候计算机报错,这是为什么呢? 其实原因很简单,指针说指向的这个字符串的地址是位于计算机代码段地...

广度搜索

广度搜索的基本使用方法 广度搜索不同于深度搜索,是一种一步一步进行的过程,每一个点只记录一遍。需要用到队列记录每一步可以走到的位置,找到目标位置输出步数即可。 用到的知识:结构体、队列 如图 首先我们需要定义一个结构体来存储每个遍历到的点和步数 广搜不会用到递归,所以可以直接在主函数里写,这里需要定义一个结构体队列 初始化队列并将起始点入列 遍历 完整代码...

NIO Socket 编程实现tcp通信入门(二)

1、NIO简介 NIO面向通道和缓冲区进行工作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。可以双向传输数据,是同步非阻塞式IO。NIO还引入了选择器机制,从而实现了一个选择器监听多个底层通道,减少了线程并发数。用NIO实现socket的Tcp通信需要掌握下面三个知识点: Buffer 缓冲区 Channel 通道 Selector 选择器   2、java.nio.Buff...

[字节码系列]ObjectWeb ASM构建Method Monitor

      在前面的篇章中,我们看到Java Instrutment的强大能力,本篇,我们将介绍如何使用ObjectWeb ASM的字节码增强能力构建Method Monitor       1.什么是ObjectWeb ASM      ObjectWeb ...