开发笔记_Oracle学习笔记 _07_函数

Oracle学习 第7天

           —— 函数



Oracle中函数的分类

                主要分两大类:单行函数  和  多行函数

                        单行函数:对每一行输入值进行计算,得到相应的计算结果。以每一行为参数的。如:LENGTH。                

SELECT LENGTH(ename) FROM emp;

   

                        多行函数: 对多行输入值进行计算,得到多行相对应的一个结果。如: MAX、MIN。
SELECT MAX(sal) FROM emp;

    

单行函数分为五小类

1、字符函数

用户处理字符(串)相关。

①  REPLACE(字段名, 准备替换的字符,  替换之后的字符)

                -- 该函数用户替换字符串。其操作的是显示结果,并不是数据库中真实的数据。


SELECT t.*, REPLACE(t.ename, 'A', '*') AS replace_uname FROM emp T;

示例:将ENAME中的 'A' 全部替换成  '*'  

INSTR(字符串, 子字符串, 开始查找的位置, 出现的位置)

                 -- 该函数用户查找子字符串在源字符串中出现的位置。开始位置与出现位置默认从1开始计数。

SELECT (SELECT t.ename FROM emp t WHERE t.empno = 7788)||'OracleScottUser' AS ENAME, INSTR ((SELECT t.ename FROM emp t WHERE t.empno = 7788), 'T',1,2) FROM dual;

示例:查询EMP表中EMPNO为7788的用户姓名并拼接上字符串OracleScottUser之后输出,并且从第 1 个字符开始查找最后输出的字符串中第 2 个 'T' 的位置。

注意:dual  -- 默认虚表。用于测试。


③ CONCAT(字段/字符串, 字段/字符串)

                -- 该函数用于连接两个字符串,也可以连接字段。效果与 || 相同。

SELECT t.ename || '的工作是:'|| t.job AS msg FROM emp t;

④ INITCAP(字段/字符串)                

                -- 该函数用来将字段对应的字符串或某一个字符串首字母大写显示

    UPPER(字段/字符串)

                -- 该函数用来将字段对应的字符串或某一个字符串所有字母大写显示        

     LOWER(字段/字符串)       

                -- 该函数用来将字段对应的字符串或某一个字符串所有字母小写显示


SELECT t.empno, t.ename, INITCAP(t.ename) initcap_ename, UPPER(t.ename) upper_ename, LOWER(t.ename) lower_ename FROM emp t;

⑤ LENGTH(字段/字符串)

                -- 该函数用来返回字段或字符串的长度。前面单行函数中已经演示过。这里再演示一次,来观察一下中文字符、英文字母以及数字的长度是分别如何统计的


SELECT e.jobnum,LENGTH(e.jobnum) 工号长度,e.depname, LENGTH(e.depname) 部门长度, e.e_mail, LENGTH(e.e_mail) 邮箱地址长度 FROM Demo_Employee e;

⑥ RPAD/LPAD(字符串, 字符串长度, 字符)

                -- 该函数用来补全字符,也称为粘贴字符。即在字符左(LPAD)右(RPAD)使用第三个参数字符补充字符串达到指定长度。


SELECT t.empno, LPAD(t.empno, 10, 0) lpad_empno, t.ename, RPAD(t.ename, 20, '-') rpad_ename FROM emp t;


⑦ LTRIM/RTRIM(字符串, 字符) 和 TRIM(字符 FROM 字符串)                

                -- 该函数用来去除字符串左端(LTRIM)或右端(RTRIM)的指定字符。

                    常用于在表格或文本框中去除两端空格操作


SELECT 'iiiiiiiOracle!!!!!' AS 原字符串, RTRIM( LTRIM('iiiiiiiOracle!!!!!','i'),'!') AS 去除两端字符后 FROM dual;
SELECT '00000Oracle000000000000' AS oldStr, TRIM('0' FROM '00000Oracle000000000000') AS newstr FROM dual;

                                           


⑧ SUBSTR(字符串, 起始位置, 长度)

                -- 该函数用来对指定字符串从指定位置开始截取指定长度。起始位置从 1 开始计数。


SELECT t.ename, SUBSTR(t.ename,2,3) newname FROM emp t;


2、数字函数

① ABS

                -- 该函数返回一个数字的绝对值。

② COS/ACOS

                -- 该函数返回一个数字的余弦/反余弦值。

③ SIN/ASIN

                -- 该函数返回一个数字的正弦/反正弦值。

④ TAN/ATAN

                -- 该函数返回一个数字的正切/反正切值

⑤ CEIL

                -- 该函数返回大于等于指定数字的最小整数。即向上取整。

    FLOOR

                -- 该函数返回小于等于指定数字的最大整数。即向上取整。

    ROUND

                -- 该函数返回指定数字的四舍五入后的值。

    TRUNC(n, a)

                -- 该函数对数字n进行去尾操作,保留a位小数位(a为负数时,去尾到小数点左边)。

  MOD(a, b)

                -- 该函数返回指定数字的模。即a除以b后的余数。

EXP               

                -- 该函数返回数字自然底数e的n次方根

⑧ POWER(a, b)

                -- 该函数返回a的b次方

SELECT ABS(-120) ,
       ABS(100),
       ACOS(-1),
       COSH(-1),
       ASIN(0.5) ,
       ATAN(0.5) ,
       CEIL(3.14),
       FLOOR(3.14),
       ROUND(3.14),
       EXP(2), 
       MOD(9,2),
       POWER(2,4),
       TRUNC(-56.5),
       TRUNC(5566.51236,2),
       TRUNC(5566.51236,-2)
   FROM dual;

3、日期函数

① ADD_MONTH(date, n)

                -- 返回指定日期加上 n 个月后的日期,n 可以为负数。

② LAST_DAY(date)

                -- 返回指定月的最后一天。如果不设置格式,默认时分秒为当前时间。

③ MONTHS_BETWEEN(date1, date2)

                -- 返回两个日期相差多少月。

④ NEXT_DAY(TO_DATE(date, 星期n)

                -- 返回date之后的下一个星期几的日期

SELECT 
  ADD_MONTHS(TO_DATE('20180506','YYYYMMDD'),2) 两个月后,
  ADD_MONTHS(TO_DATE('20180506','YYYYMMDD'),-15) 十五个月前,
  LAST_DAY(SYSDATE) 本月最后一天,
  MONTHS_BETWEEN(TO_DATE('2018-05-06','YYYY-MM-DD'),'26-12月-1995') 相差月份, -- 第二个日期参数使用了默认格式,所以无需转换
  NEXT_DAY(TO_DATE('20180524','YYYYMMDD'), '星期二') 下一个星期
FROM DUAL;


4、转换函数

TO_DATE(字符串, 格式)               

                -- 将字符串转按照指定格式换成日期类型

TO_CHAR(日期, 格式)

                -- 将指定日期按照指定格式转换成字符串

                    yy        :        两位数字的年份        2018  -->  18

                    yyyy    :        四位数字的年份        2018  -->  2018

                    mm     :        两位数字的月份        6月     -->  06

                    dd       :        两位数字的日期        26日   -->  26

                    hh24   :        24小时制的时           8        -->  20

                    hh12   :        12小时制的时           9        -->  09

                    mi       :      分                         

                    ss        :      秒   

                    day     :      星期                         星期一

TO_CHAR(数字, 格式)

                -- 将指定数字按照指定格式转换成字符串,常用于货币。

                    9        :        数字。忽略前面的0

                    0        :        数字。位数如果不足则用0补齐

                    .         :        小数点

                    ,         :        逗号

                    $        :          美元符号。加在数字前

                    L        :        本地货币符号。加在数字前

                    C       :         国际货币符号。加在数字前

                    G       :        显示组分隔符。最常见的是3位数字一组,即千分符

                    D       :        小数点符号          

SELECT 
    TO_CHAR(HIREDATE,'yyyy-hh-dd  hh24:mi:ss   day') AS "yyyy-hh-dd  hh24:mi:ss   day",
    TO_CHAR(SAL, 'L999G999D99') AS 薪水
FROM emp;

5、系统函数与特殊函数

① DECODE(字段,  值1, 结果1, 值2, 结果2, …… , 值n, 结果n, 默认结果)

                -- 该函数目前是Oracle独有的特殊函数。遵循IF-ELSE-THEN的逻辑,效果与CASE-WHEN-END语句类似。

                    即,当字段的值为值n时,返回结果n,如果都不满足,返回默认结果。

SELECT 
    t.*,
    DECODE(t.deptno,10,'管理部门', 20,'系统开发部门',30,'数据库维护部门','其他部门') AS 部门
FROM emp t; 

② TERMINAL

                -- 当前会话客户所对应的终端的标识符

③ LANGUAGE

                -- 当前数据库语言

④ DB_NAME

                -- 当前数据库实例名

⑤ NLS_DATE_FORMAT

                -- 当前会话客户所对应的日期格式

⑥ SESSION_USER

                -- 当前会话客户所对应的数据库用户名

⑦ CURRENT_SCHEMA

                -- 当前会话客户所对应的默认方案名

⑧ HOST

                -- 当前数据库所在主机信息

SELECT 
    SYS_CONTEXT('userenv','TERMINAL') 终端标识,
    SYS_CONTEXT('userenv','LANGUAGE') 语言,
    SYS_CONTEXT('userenv','DB_NAME') 数据库实例,
    SYS_CONTEXT('userenv','NLS_DATE_FORMAT') 日期格式,
    SYS_CONTEXT('userenv','SESSION_USER') 用户名,
    SYS_CONTEXT('userenv','CURRENT_SCHEMA') 默认方案名,
    SYS_CONTEXT('userenv','HOST') 主机信息    
FROM dual;

            

猜你喜欢

转载自blog.csdn.net/shaotaiban1097/article/details/80425215