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

  2023年2月2日10:48:09

  trim():去除字符串左右两边空格;

  ltrim():去除字符串左边空格;

  rtrim():去除字符串右边空格;

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)

2021年12月22日11:31:19

如果原数据字段为空,求和结果也为空

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 指明需保留小数点后面的位数。可选项,不带该参数时,截去所有的小数部分。

        具体用法:oracle 补齐两位小数(不足补0)

      1.3.17.1.2 trunc函数处理日期  

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

      语法:

        TRUNC(date[,fmt])

具体用法:Oracle trunc()、interval、extract()处理日期类型

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

2023年2月2日10:50:32

22.TRANSLATE()--替换指定内容

剔除字符串当中的数字

SELECT X.USERCODE, TRANSLATE(X.USERCODE, '/0123456789', '/')
  FROM BASE_AC_USER X

 

posted @ 2017-06-01 17:46  Marydon  阅读(1097)  评论(0编辑  收藏  举报