zoukankan      html  css  js  c++  java
  • oracle 常用函数

    1.TO_CHAR()--转换成字符串类型数据

    TO_CHAR(T1.FPAYDATE, 'yyyy-MM-dd')

      UpdateTime--2017年6月20日10:46:05

      参考地址:http://blog.csdn.net/jinlong5200/article/details/3135949

      1.1 TO_CHAR(NUMBER)

        用途:本函数把参数N转为一个VARCHAR2类型的数值。N可以是NUMBER,BINARY_FLOAT,或者BINARY_DOUBLE;如果不带格式,那么函数会把N转换为足以表示N的VARCHAR2字符串。

           格式表参考:

     格式  简例  举例  说明

     ,

    (逗号)

     '99,999' 

     select to_char(1000,'9,999') from dual

    --1,000

     逗号,一般以千分位出现,作为分组符号使用.如果需要您也可以当作是十分位,百分位出现,可以出现N次,视乎数字的大小而定.
    变态的例子是 to_char(1234,'9,9,9,9'). 
     注意事项:只能出现在整数部分

     .

    (点号)

     '99.99'

     select to_char(1234.34,'9,9,9,9.99') from dual

    --1,2,3,4.34

     点号,不要念为"句号",句号是个圆圈,点号只能出现在小数点对应的地方,只能出现一次.

     注意事项:只能出现在一个地方,就是原来数据小数点位置

     $

    (美元符号)

     '$999.99'

     select to_char(1234.34,'9,999.$99') from dual

    --$1,234.34

     美元,可以放在任意地方

     注意事项:只能出现一次

     0(零)  '0999.99'

     select to_char(1234,'9,999.00') from dual

    -- 1,234.00

     零.在对应位置返回对应的字符,如果没有则以'0'填充

     注意事项:这是一个强制的符号,对应位没有,则以'o'填充,这是9很大不同地方

     9  '999.99'

     select to_char(123,'99999.99') from dual

    --123.00

     9.在小数位,则表示转换为对应字符,如果没有则以0表示;在整数位,没有对应则不填充字符

    注意事项:对于0和9而言,如果格式的位数不和数字的位数保持一致,会返回'#'.
    譬如to_char(12345,'9999')='#####'

     B(空格符)  'B999'

     select 'S'||TO_CHAR(1234,'99B99') from dual

    --S 1234

     没有其它特别作用,在整数部分最前面加一个空格,可以出现在任意位置

    注意事项:只能出现在整数部位

     C(国际货币符号)  'C9999'    在特定的位置返回一个ISO货币符号(就是NLS_ISO_CURRENCY参数所代表的值)
     TO_CHAR(1233,'C9999')='CNY1234' ,这是新的国际标准RMB,关于这个可查询"国际货币符号"
    注意事项:只能出现在整数部位第一位.
    可以通过alter session set NLS_ISO_CURRENCY='JAPAN';来修改当前会话的设置.
    D(ISO 小数位符号) '999D99'   这是"点号"的国际版本(ISO),作用等同于点号,也是只能出现一次.所不同的是,数据库会根据NLS_NUMERIC_CHARACTER的参数值来设置内容.默认的这个值是点号.
    注意事项:没有特别需要一般不要用这个格式符号.也不要轻易修改参数值.
    也可用alter sesssion set 来修改.
    alter session set nls_numeric_characters='!,';   to_char(1234.34,'9999d99')=1234!34
    EEEE(科学计算符) 9.9EEEE   科学计算符号
    TO_CHAR(2008032001,'9.9EEEE')='2.01E+09',由于是科学计算方法,所以小数位前面加一个9或者0即可,多个是没有意义的.
    G(分组符号) 999G999   是逗号(,)的的ISO标准,作为分组符号使用,可以放在多个地方使用.
    TO_CHAR(123456,'999G9G99')=123,4,56
    注意事项:同第八项 -D, 此外如果
    要转换出小数点,则要和D配合使用,不能和点号配合.
    L(本地货币符号) 'L999'   是C的本地版本.可以放在整个格式的最前面和最后面.
    TO_CHAR(123456,'999G9G99D00L')=123,4,56.00¥
    注意事项:同第七项 C
    MI(负号) '9999MI'    如果是负数,在尾部加上负号(-),如果是正数,则尾巴加上空格
    to_char(1234,'9999mi')||'S'||TO_CHAR(-5678,'9999MI') =1234 S5678-
    注意事项:只能放在格式尾巴
    PR(符号) 9999PR   是表达负数的另外一种方式.如果是正数,则头部加上空格;如果是负数,则用小简括号<>把数字包起来.
    TO_CHAR(-1234.89,'9G999D00PR')=<1,234.89>
    注意事项:同12
     S   '9999S'

     select to_char(1234,'S9999') from dual

    --+1234

     是12,13的综合改进版本.为整数加一个正号+,为负数加一个符号-.S在前则加在前,在后则在后
     X  XXXX

     select to_char(100,'XX') from dual

    --64

     转换为16进制

    注意事项:数值必须是大于等于0的整数。前面只能和0或者FM组合使用

     

     

        注意:其他数字转字符串的格式,由于不常用没有罗列,详细见上面网址

        小结:

            数值类:   0,9,
            分组类:  (.),(,),D,G  ,其中点好和逗号因为表示不明显,所以用小括号凸显。
            货币类: $,C,L,U
          计算转换类:EEEE,RN,V,X  
           正负符号:MI,PR,S
            其它类:B
            正统类:TM

      1.2 TO_CHAR(CHARACTER)

        用途:把NCLOB,CLOB,NCHAR转换为VARCHAR2

      1.3 TO_CHAR(DATETIME)

        用途:把日期转化为字符串 

        UpdateTime--2017年7月5日08:10:02   

     格式  举例  说明
     -  /  ,  . ; :
     "text" 

     SELECT TO_CHAR(sysdate,'yyyy"年"MM"月"dd"日"') FROM DUAL

    --2017年06月21日

     时间分隔符号,除了标准的几个,还允许用文字作为分割符号
     AD
     A.D.
     不会举例  即拉丁文Anno Domini的简写,表示公元.会根据nls的不同转换为公元或者ad等
    无特殊注意事项
     AM
     A.M.
     不会举例  上午的简写 ,同pm, p.m. (下午) , 中文环境输出为上午(如果是上午)
     BC
     B.C.
     不会举例  虽然标准的写法是B.c. (c小写) 或者BC,好在Oracle不讲究这个。表示公元前
     CC
    SCC

     SELECT TO_CHAR(SYSDATE,'CC YYYY-MM-dd') FROM DUAL

    --21 2017-07-05

     返回世纪,以阿拉伯数字表示
    如果年的后两位介于01-99那么,返回前两位+1,否则返回前两位
     D

     SELECT TO_CHAR(sysdate,'D') FROM dual

    --4

     一周之中的某天,返回的是序号1-7(星期日-星期六)
     DAY

     SELECT TO_CHAR(sysdate,'DAY') FROM dual

    --WEDNESDAY

     一周之中的某天,不过返回的是星期几而已,这和语言设置有关系,在中国环境 NLS_DATE_LANGUAGE=SIMPLIFIED CHINESE ,用星期一到星期天表示
     DD

     SELECT TO_CHAR(sysdate,'DD') FROM dual

    --05

     月份中的某天(1-31)
     DDD

    SELECT TO_CHAR(sysdate,'DDD') FROM dual

    --186

     年份中的某天(1-366)
     DL

    SELECT TO_CHAR(sysdate,'DL') FROM dual

    --Wednesday, July 05, 2017

    返回长的日期格式。受到NLS_TERRITORY,NLS_LANGUAGE参数控制。例 2008年4月28日 星期一
    限制:除了DL,其它什么的都不能设置。
     DS

    SELECT TO_CHAR(sysdate,'DS') FROM dual

    --7/5/2017

    返回短的日期格式。受到NLS_TERRITORY,NLS_LANGUAGE参数控制。 例如 2008-04-28
    限制:除了DL,其它什么的都不能设置。
    DY

    SELECT TO_CHAR(sysdate,'DY') FROM dual

    --WED

    日期的简称,就是星期几(当然这指的是中国环境下)
    HH

    SELECT TO_CHAR(SYSDATE,'HH') FROM DUAL

    --07

    表示小时,为12小时制(1-12)表示小时,为12小时制,同hh12(1-12)
    HH12

    SELECT TO_CHAR(SYSDATE,'HH12') FROM DUAL

    --07

    表示小时,为12小时制(1-12)
    HH24

    SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL

    --07

    表示小时,为24小时制(0-23)
    MI

    SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL

    --55

    分(0-59)
    MM

    SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL

    --07

    2位月(1-12)
    MON

    SELECT TO_CHAR(SYSDATE,'MON') FROM DUAL

    --JUL

    月的简称,和国家有关系NLS_DATE_LANGUAGE,例如04在中文环境下用4月表示.
    MONTH

    SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL

    --JULY

    月的名称,国家有关系NLS_DATE_LANGUAGE,目前在中文下04表示为4月。
    PM
    P.M.
      同am,a.m.表示下午
    Q

    SELECT TO_CHAR(SYSDATE,'Q') FROM DUAL

    --3

    季度(1-4)
    SS

    SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL

    --44

    秒(0-59),一分钟内
    SSSSS   一天从午夜开始的累积秒数.(0-86399)
    TS

    SELECT TO_CHAR(SYSDATE,'TS') FROM DUAL

    --8:03:51 AM

    返回短日期格式内容,包括时分秒等,只能和dl,ds组合使用,格式是:
    dl ts或者ds ts ,中间以空格间隔开。
    表现形式受NLS_TERRITORY 和NLS_LANGUAGE影响。
    Y,YYY

    SELECT TO_CHAR(SYSDATE,'Y,YYY') FROM DUAL

    --2017

    四位年,用逗号分隔
    YEAR
    SYEAR

    SELECT TO_CHAR(SYSDATE,'YEAR') FROM DUAL

    --TWENTY SEVENTEEN

    发音表达的年
    S前缀表示公元前BC
    YYYY
    SYYYY

    SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL

    --2017

    四位年,S前缀表示公元前BC
    YYY
    YY
    Y
      依次表示后面3,2,1位的年,例如2017 可以分别取值为017,17,7

      

      

        小结:

           1.下表的格式基本上也都可以用于TO_DATE, TO_TIMESTAMP, TO_TIMESTAMP_TZ, TO_YMINTERVAL,TO_DSINTERVAL函数;

           2.从以上看,主要就是表示时间几个部分的格式:世纪、年,月,日,时,分,秒,毫秒,以及其它一些混合格式。每个时间部分都可以有多种的表达方式,通过这样归类就比较容易记忆;
              3.很多格式可以组合使用,这样最终可以形成足够丰富的表达其形势;
           4.很多格式和nls是密切相关的;

           5.某些输出(返回)和格式大小写是有关系的,这在中文环境下体现不出来(目前来没有看到),但是english环境下就名下,以to_char(sysdate,'day')为例子,如果是西文环境是返回sun(假设sysdate位于周末),如果to_char(sysdate,'DAY')则返回SUN。  

    2.TO_NUMBER() --转换成字符串类型数据

    3.TO_DATE() --转换成日期类型数据

    TO_DATE(T1.FPAYDATE, 'yyyy-MM-dd')

        UpdateTime--2017年7月7日11:48:22

        使用注意事项:

          a.使用to_char()将date类型数据转换成字符串时,可以只带一个参数

    select to_char(t.schedule_date) from CONSULT_SCHEDULE t
    --28-APR-17

          b.使用to_date()将varchar2类型转换成日期时,必须带两个参数

    --正确用法
    select t.schedule_date from CONSULT_SCHEDULE t where t.schedule_date = to_date('2017/7/7','yyyy-MM-dd')
    --错误用法
    --报错:文字与格式字符串不匹配
    select t.schedule_date from CONSULT_SCHEDULE t where t.schedule_date = '2017/7/7'
    select t.schedule_date from CONSULT_SCHEDULE t where t.schedule_date = to_date('2017/7/7')

          c.Date类型转varchar2

            TO_CHAR(SYSDATE,'yyyy-MM-dd hh24:mm:ss')

               c1.转换格式不区分大小写;

            c2.小时格式化:默认12小时,24小时格式转换时需要指明;

            c3.分钟格式化:可以使用mi或mm。

          d.varchar2-->Date

             方法一:

            TO_DATE(#SCHEDULE_DATE#,'YYYY-MM-DD hh24:mi')          

            前两个规则一样;

            d3.转分钟时,必须使用mi,不能使用mm,否则会报错;

            d4.如果格式化到分,会自动添加上0秒。

            UpdateTime--2017年10月31日09:41:01

            方法二:

            DATE#SCHEDULE_DATE#

            举例:

    --将字符串类型'1970-01-01'转换成日期类型
    SELECT TO_DATE('1970-01-01','YYYY-MM-DD') FROM dual;
    SELECT DATE'1970-01-01' FROM DUAL;

          e.所以为了避免异常,转换分钟时,建议使用"mi"进行格式化;

             f.Date类型可以直接进行加减运算。

             示例:

    <isNotEmpty prepend="and" property="ENDDATE">
        <![CDATA[
         APPLY_DATE <= TO_DATE(#ENDDATE#,'yyyy-MM-dd')+1
       ]]>
    </isNotEmpty>

          g.

            g1.to_date是类型转换,不是格式转换,字符串和后面的格式要匹配;

            g2.to_char才是转成对应格式。

    --错误用法
    INSERT INTO TEST2 (C1, C2,c3) VALUES ('1',1,to_date('2010-12-27 00:00:00','yyyy-mm-dd'))
    --正确用法
    INSERT INTO TEST2 (C1, C2,c3) VALUES (1,1,to_date('2010-12-27 00:00:00','yyyy-mm-dd hh24:mi:ss'))
    --错误用法            
    SELECT TO_DATE(TO_CHAR('2017-06-13 08:06', 'YYYY-MM-DD'),'yyyy-MM-dd') from dual;
    --错误用法        
    SELECT TO_CHAR('2017-06-13 08:06', 'YYYY-MM-DD') from dual; 
    --正确用法
    SELECT TO_DATE('2017-06-13 08:06','YYYY-MM-DD HH24:mi') from dual;
    SELECT TO_CHAR(TO_DATE('2017-06-13 08:06','YYYY-MM-DD HH24:mi'), 'YYYY-MM-DD') from dual;
    --将date类型的yyyy-MM-dd HH24:mi格式的数据转换成yyyy-MM-dd格式的date类型
    SELECT TO_DATE(TO_CHAR(TO_DATE('2017-06-13 08:06','YYYY-MM-DD HH24:mi'), 'YYYY-MM-DD'),'YYYY-MM-DD') from dual;    

         操作日期类型

           A.查询系统当前日期

      --查询出来的结果是12小时制的(注意与mysql与java中24小时和12小时的不同)
        select to_char(sysdate,'yyyy-MM-dd hh12:mm:ss') from dual;
        select to_char(sysdate,'yyyy-MM-dd HH:mm:ss') from dual;
        select to_char(sysdate,'yyyy-MM-dd hh:mm:ss') from dual;
      --查询出来的是24小时制的
        select to_char(sysdate,'yyyy-MM-dd hh24:mm:ss') from dual;
        select to_char(sysdate,'yyyy"年"MM"月"dd"日" hh24"时"mm"分"ss"秒"') 系统当前时间 from dual;

          B.将date类型转换成字符串类型 to_char(date类型,'转换格式')

      --查询员工信息将入职时间转换成****年**月**日的格式并按降序排列
        select to_char(hiredate,'yyyy"年"MM"月"dd"日"') [as] 雇佣日期 from emp order by hiredate desc;

          说明:

            b1.[as]表示as关键字可带,可不带;

            b2.年月日需加上双引号;

            b3.别名不能加双引号。

            C.将字符串类型转换成date类型 to_date('字符串类型','要转换的date类型格式')

      --新增一条员工信息,雇佣时间为当前时间
        insert into emp values(员工编号,null,null,null,to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy/MM/dd'),null,null,null);

          说明:

            c1.如果直接sysdate的话,插入的时间带有时分秒;

            c2.将系统时间格式化后在插入:需先将其转换成字符串类型,进行格式化,再转换成指定格式的日期类型      

    --新增员工
        insert into emp values(员工编号,null,null,null,to_date('2017-06-01','yyyy/MM/dd'),null,null,null);

          D.当月一号至系统当前时间

    --开始日期(管道符||表示用来拼接字符串)
      SELECT TO_CHAR(SYSDATE,'YYYY-MM')||'-01' FROM DUAL;
    --结束日期
      SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;

          UpdateTime--2017年7月21日14:53:12

          E.使用trunc()函数对日期进行处理(截取,获取本周一的日期)

          见下面1.3.17.1.2 trunc函数处理日期 

          F.

    4.TRIM()--去除空格

    TRIM(T1.FITEMHOSCODE) FITEMHOSCODE

    5.SUBSTR()--截取字符串

      语法:

      格式一:substr(str,i,n)  从第i个字符开始截取字符串,截取n个字符,区间 [i,i+n)

      格式二:substr(str,i)  从第i个字符开始截取字符串至str的最后一个字符,区间 [i,str.length()  - i + 2)

      说明:

      需要特别注意的是,与js不同的是:i不是字符所在下标索引,而是长度!

    --截取月
    --正确截取
    select substr('2018-07-27', 6, 2) 月 from dual --07
    --错误截取
    select substr('2018-07-27', 7, 2) 月 from dual --7-
    

      当i=0或1时,都是从第一位开始截取;

    --截取年
    select substr('2018-07-27', 0, 4) 年 from dual --2018
    select substr('2018-07-27', 1, 4) 年 from dual --2018
    

      当i<0时,从右往左数,第-i个开始截取,截取n个字符;

    --截取月和日
    select substr('2018-07-27',-5,5) "月-日" from dual--07-27
    

      当j>str.length()时,最后一位是str的最后一个字符。

    --截取月和日
    select substr('2018-07-27', 6) "月-日" from dual--07-27
    select substr('2018-07-27', 6, length('2018-07-27') - 6 + 1) "月-日" from dual --07-27
    select substr('2018-07-27', 6, 200) "月-日" from dual --07-27  

      注意:由于-是关键符,所以别名需要用""包住。   

    6.UPPER()--将内容全部转换成大写

    UPPER(T2.FITEMCODE(+))
    UPPER('%' || #FICDNAME#||'%')

    7.LOWER()--将内容全部转换成小写

    UPPER(X2.FICDCODE) Like '%' || upper(?) || '%' or X2.FICDNAME like '%' || ? || '%'

    8.NVL()  

        语法:
          NVL(param1,param2)

        含义:

          a.用于判断第一个参数是否为空,如果param1==null,该函数值为param2;否则,该函数值为param1;相当于java中的三元运算符 value=param1 ? param1 :param2;

          b.展示数据时,通常用来将null替换为0,在计数时通常使用。

        举例:

    NVL(column,0) --如果该字段内容为空,则显示为0

    9.SUM() 求和

         语法:

          SUM(数字column)

    10.DECODE()--分支函数

        语法:

          DECODE(VALUE,IF1,THEN1,IF2,THEN2,ELSE) 是对CASE WHEN 的简化

        举例:

    SELECT ENAME,DECODE(sal,800,sal+50,950,sal+5,sal) AS 员工薪水 FROM EMP;

    11.COUNT(1),COUNT(*),COUNT(columnName)

          COUNT(1)与COUNT(*) --都可用来查询表中有多少条数据(列)

          COUNT(columnName) --字段内容为空的不会被计数

         举例:对字段值的唯一计数

    SELECT count(distinct fdeptcode) FROM tdeptorg;

    12.GREATEST()--最大值

        语法:

          GREATEST(column1,column2,...)

        输出该行数据的最大值

    13.LEAST()--最小值

        语法:

          LEAST(column1,column2,...)

        输出该行数据的最小值

        举例:

          查询苹果四季度销量的最大值和最小值

    14.MAX()--最大值

        语法:

          MAX(数字column)

        输出该字段的最大值

    15.MIN()--最小值

        语法:

          MIN(数字column)

        输出该字段的最小值

      小结:    

        a.GREATEST()和LEAST(),横向比较,输出的是该行数据的最大值或最小值,后面可以跟其他字段一块进行查询;

        b.MAX()和MIN() ,纵向比较,输出的是该字段的最大值或最小值,后面不能跟其他字段一块进行查询;

        c.这四个函数通常用于比较数值字段,也可以用来比较其他类型字段,但是没意义。

    16 EXISTS(),IN(),NOT EXISTS(),NOT IN()

      16.1 EXISTS()与IN()

          区别:           

            a.EXISTS是一个存在判断,如果后面的查询中有结果,则exists为真,否则为假
              用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。
            b.in 是一个集合运算符,a in {a,c,d,s,d....},这个运算中,前面是一个元素,后面是一个集合,集合中的元素类型是和前面的元素一样的
              它后面带的select一定是选一个字段,而不是select *
            c.sql
              select * from 表A where exists(select * from 表B where 表B.id=表A.id)
            这句相当于
              select * from 表A where id in (select id from 表B)
            d.子查询表大的用exists,子查询表小的用in

       16.2 NOT EXISTS()与NOT IN()

          区别:

            如果查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。

        UpdateTime--2017年6月7日14:21:19

        参考链接:http://blog.csdn.net/iteye1011/article/details/12449393  

    17.TRUNC()与ROUND()

      17.1  TRUNC()

            1.3.17.1.1 trunc函数处理数字

            用途:单纯地对数字进行截取处理,不做四舍五入操作  

            语法:

                TRUNC(number[,decimal_places])

            参数说明:        

              number 待做截取处理的数值

              decimals 指明需保留小数点后面的位数。可选项,不带该参数时,截去所有的小数部分。

            举例:

    --情景1:参数带小数,不带第2个参数
    SELECT TRUNC(123) FROM DUAL;--123 
    SELECT TRUNC(123.98) FROM DUAL; --123
    --情景2:参数是整数,保留1位小数
    SELECT TRUNC(123, 1) FROM DUAL; --123
    --情景3:参数带小数,保留2位小数
    SELECT TRUNC(123.123, 2) FROM DUAL; --123.12
    --情景4:参数带小数,保留4位小数
    SELECT TRUNC(123.123, 4) FROM DUAL;--123.123
    --情景5:保留到十位
    SELECT TRUNC(123.123, -1) FROM DUAL; --120
    SELECT TRUNC(123, -1) FROM DUAL; --120
    --情景6:保留到小数点前 5位
    SELECT TRUNC(123.123, -5) FROM DUAL; --0

            用法:        

            1.不带第二个参数,默认只保留整数位,不做四舍五入操作,单纯截取;
            2.带第二个参数:
              2.1 当参数为正数时:
                2.1.1 当要保留的小数位 < 要截取的小数位数时,直接截取;
                2.1.2 当要保留的小数位 > 要截取的小数位数时,返回原数字。
              2.2 当参数为负数时:
                2.2.1 当要保留的整数位 < 要截取的整数位数时,从整数的个位倒序(个,十,百...位)直接截取;
                2.2.2 当要保留的整数位 > 要截取的整数位数时,返回0。      

          1.3.17.1.2 trunc函数处理日期  

          用途:对日期进行截取处理

          语法:

            TRUNC(date[,fmt])

          参数说明:

            date 待做截取处理的日期

            fmt 指定要截取的日期格式。可选项,不带该参数时,截去时分秒,格式只能分为:一种 y,yy,yyy,yyyy,mm,dd,d;另一种w,iw,ww

          举例:

    --参数是日期,不带第2个参数
    SELECT TRUNC(SYSDATE) FROM DUAL;--2017/6/7
    --返回当前日期
    SELECT TRUNC(SYSDATE, 'DD') FROM DUAL;--2017/6/7
    --返回当年第一天
    SELECT TRUNC(SYSDATE, 'YYYY') FROM DUAL;--2017/1/1
    SELECT TRUNC(SYSDATE, 'YYY') FROM DUAL;--2017/1/1
    SELECT TRUNC(SYSDATE, 'YY') FROM DUAL;--2017/1/1
    SELECT TRUNC(SYSDATE, 'Y') FROM DUAL;--2017/1/1
    --返回当月第一天
    SELECT TRUNC(SYSDATE, 'MM') FROM DUAL;--2017/6/1
    --返回当前星期的第一天
    SELECT TRUNC(SYSDATE, 'D') FROM DUAL;--2017/6/4
    --这种方式会报错
    SELECT TRUNC(SYSDATE, 'YYYY-MM-DD') FROM DUAL;

          UpdateTime--2017年7月21日11:23:20

          格式w,iw,ww区别介绍:

          参考链接:http://blog.chinaunix.net/uid-23072872-id-3664151.html

          这3个参数均为取每周第一天,区别如下:             

          w,按每月的1日为每周第一天,例如1日为当月第一周第一天,8日为第二周第一天……依此类推;
          ww,与w功能类似,不过它是按每年的1月1日为第一周第一天,1月8日为第二周第一天……依此类推;
          iw,不受月份与年份的影响,直接取日期参数的周一。

          举例:

    --trunc(sysdate),截取当前日期年月日
    --trunc(sysdate,'iw')取当前日期所在星期的星期一
    --trunc(sysdate,'ww') 按年度计算取当前日期所在星期的星期一
    --trunc(sysdate,'w') 按月度计算取当前日期所在星期的星期一
    SELECT trunc(sysdate) 当前日期,trunc(sysdate,'iw') 取星期一,trunc(sysdate,'ww') 按年度计算取星期一,trunc(sysdate,'w') 按月度计算取星期一 FROM DUAL

      17.2 ROUND()

          用途:对数字进行四舍五入操作

          用法:和tranc()函数的用法大致相同,不同的是使用该函数会以四舍五入的方式进行截取        

            1.不带第二个参数,默认只保留整数位,执行四舍五入操作;
            2.带第二个参数:
              2.1 当参数为正数时:
                2.1.1 当要保留的小数位 < 要截取的小数位数时,进行截取并四舍五入;
                2.1.2 当要保留的小数位 > 要截取的小数位数时,返回原数字。
              2.2 当参数为负数时:
                2.2.1 当要保留的整数位 < 要截取的整数位数时,从整数的个位倒序(个,十,百...位)进行截取并四舍五入;
                2.2.2 当要保留的整数位 > 要截取的整数位数时,返回0。

          语法:

             ROUND(number[,decimal_places])

          参数说明:

            number 待做四舍五入的数值      

            decimal_places 四舍五入 , 保留几位小数。可选项,不带该参数时,只保留整数,执行四舍五入操作。

          举例:

    --情景1:参数带小数,不带第2个参数
    SELECT round(123) FROM DUAL;--123 
    SELECT round(123.98) FROM DUAL; --124
    --情景2:参数是整数,保留1位小数
    SELECT round(123, 1) FROM DUAL; --123
    --情景3:参数带小数,保留2位小数
    SELECT round(123.123, 2) FROM DUAL; --123.12
    --情景4:参数带小数,保留4位小数
    SELECT round(123.123, 4) FROM DUAL;--123.123
    --情景5:保留到十位
    SELECT round(123.123, -1) FROM DUAL; --120
    SELECT round(123, -1) FROM DUAL; --120
    --情景6:保留到小数点前 5位
    SELECT round(-123.123, -5) FROM DUAL; --0

    18.CEIL()与FLOOR()

          1.3.18.1 CEIL()

          用途:取大于等于数值number的最小整数

          语法:

             CEIL(number)

          举例:

    --大于已知数的最小整数
    SELECT CEIL(10.1) FROM DUAL;--11
    --等于已知数的最小整数
    SELECT CEIL(10) FROM DUAL;--10

          1.3.18.2 FLOOR()

          用途:取小于等于数值number的最大整数

          语法:

             FLOOR(number)

          举例:

    --小于已知数的最大整数
    SELECT FLOOR(10.1) FROM DUAL;--10
    --等于已知数的最大整数
    SELECT FLOOR(10) FROM DUAL;--10

        UpdateTime--2017年6月29日10:07:58

    19.CONCAT()--字符串拼接

      字符串拼接,通常使用管道符||

        用途:拼接字符串,不推荐使用

        语法:

          CONCAT('字符1','字符2')

        举例:

    --CONCAT只能连接两个字符串
    SELECT concat('Mary','don') as 姓名 FROM DUAL;
    --||可以连接多个字符串
    SELECT 'Mary' || 'don' as 姓名 FROM DUAL;

         UpdateTime--2017年7月21日14:56:43

    20.NEXT_DAY()

        用途:获取指定时间的下一个星期几(由char指定)所在的日期

        语法:

          NEXT_DAY(date,char)

          date-日期类型

          char-数字1~7或Monday~Sunday

        注意:

          (1)数字1~7分别代表星期日~星期六,1表示星期日,2代表星期一,以此类推;

          (2)当第二个参数传的星期数<=现有星期数时,会返回下一个星期的日期;当第二个参数所传的星期数>现有星期数时,则会返回本周的相应星期日期。

         举例:根据系统当前时间查出本周一和本周日所在日期

    --根据系统当前时间查出本周一和本周日所在日期
    --方法一
    SELECT SYSDATE 当前日期,TRUNC(SYSDATE,'iw') 本周一,NEXT_DAY(TRUNC(SYSDATE,'iw'),1) 本周日 FROM DUAL;
    --方法二
    SELECT SYSDATE 当前日期,TRUNC(SYSDATE,'iw') 本周一,TRUNC(SYSDATE,'iw')+6 本周日 FROM DUAL

        结果展示:

    21.REPLACE()--替换指定内容

      语法:

        replace(字符串,被替换字符串,替换后的字符串)

    REPLACE('2018-07', '-', '')
    

    number[(总位数[,小数位])]

      默认情况下,可以不设置可存储数值的位数;

      当不设置小数位时,只能存储整数;

      number(5,3)表示的是:可存储5-3=2位整数,小数点后保留3位。

  • 相关阅读:
    os 模块1
    除法
    python基础四(jsonossys andomstring模块、文件、函数)
    python基础三(集合、文件)
    linux下mysql安装
    linux下tomcat安装
    linux系统jdk安装
    python基础二(list,tuple元祖、dic字典,字符串)
    python基础一(安装、变量、循环、git)
    charles抓包
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/6930039.html
Copyright © 2011-2022 走看看