• Oracle系列四 单行函数查询语句


    单行函数

    • 操作数据对象
    • 接受参数返回一个结果
    • 只对一行进行变换
    • 每行返回一个结果
    • 可以转换数据类型
    • 可以嵌套
    • 参数可以是一列或一个值

    包含:字符,数值,日期,转换,通用


    字符函数

    1.大小写控制函数:这类函数改变字符的大小写。

    LOWER('SQL Course')  sql course
    UPPER('SQL Course')  SQL COURSE
    INITCAP('SQL Course') Sql Course

    示例:

    SELECT
        employee_id,
        last_name,
        department_id
    FROM
        employees
    WHERE
        lower(last_name) = 'higgins';


    2.字符控制函数

    CONCAT('Hello', 'World')     HelloWorld
    SUBSTR('HelloWorld',1,5)    Hello
    LENGTH('HelloWorld')        10
    INSTR('HelloWorld', 'W')    6
    LPAD(salary,10,'*')        *****24000  //第一个参数是需要处理的字符串,第二个参数是需要将字符串扩充的宽度,第三个参数表示加宽部分用什么字符来做填补,第三个参数的默认值为空格,但也可以是单个的字符或字符串
    RPAD(salary, 10, '*')        24000*****  //同上
    TRIM('H' FROM 'HelloWorld')    elloWorld   
    REPLACE(‘abcd’,’b’,’m’)    amcd

    示例:

    SELECT
        employee_id,
        concat(first_name,last_name) name,
        job_id,
        length(last_name),
        instr(last_name,'a') "Contains 'a'?"
    FROM
        employees
    WHERE
        substr(job_id,4) = 'REP';


    数字函数

    ROUND: 四舍五入
        ROUND(45.926, 2)            45.93
    
    TRUNC:     截断
        TRUNC(45.926, 2)            45.92
    
    MOD: 求余
        MOD(1600, 300)              100
    
    
    SELECT
        round(45.923,2),
        round(45.923,0),
        round(45.923,-1)
    FROM
        dual;
    • DUAL 是一个‘伪表’,可以用来测试函数和表达式

    示例:

    SELECT
        trunc(45.923,2),
        trunc(45.923),
        trunc(45.923,-2)
    FROM
        dual;


    示例:

    SELECT
        last_name,
        salary,
        mod(salary,5000)
    FROM
        employees
    WHERE
        job_id = 'SA_REP';

    日期

    • Oracle 中的日期型数据实际含有两个值: 日期和时间。
    SELECT
        last_name,
        hire_date
    FROM
        employees
    WHERE
        last_name LIKE 'G%';


    函数SYSDATE 返回:
    日期
    时间


    日期的数学运算

    • 在日期上加上或减去一个数字结果仍为日期。
    • 两个日期相减返回日期之间相差的天数。
    • 日期不允许做加法运算,无意义
    • 可以用数字除24来向日期中加上或减去天数。

    示例:

    SELECT
        last_name,
        ( SYSDATE - hire_date ) / 7 AS weeks
    FROM
        employees
    WHERE
        department_id = 90;

    日期函数

    函数 描述
    ONTHS_BETWEEN 两个日期相差的月数
    ADD_MONTHS 向指定日期中加上若干月数
    NEXT_DAY 指定日期的下一个星期 * 对应的日期
    LAST_DAY 本月的最后一天
    ROUND 日期四舍五入
    TRUNC   日期截断
    MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')  -19.6774194
    
    ADD_MONTHS ('11-JAN-94',6)        -'11-JUL-94'
    
    NEXT_DAY ('01-SEP-95','FRIDAY')     -'08-SEP-95'
    
    LAST_DAY('01-FEB-95')            -'28-FEB-95'


    转换函数:隐 性 和显性

    隐式数据类型转换:
    Oracle 自动完成下列转换:

    源数据类型  目标数据类型
    VARCHAR2 or CHAR NUMBER
    VARCHAR2 or CHAR DATE
    NUMBER VARCHAR2
    DATE  VARCHAR2
    data<--> VARCHAR2<--> number


    显式数据类型转换  :




    TO_CHAR函数对日期的转换

    TO_CHAR(date, 'format_model')


    格式:

    • 必须包含在单引号中而且大小写敏感。
    • 可以包含任意的有效的日期格式。
    • 日期之间用逗号隔开。

    示例:

    SELECT
        TO_CHAR(SYSDATE,'yyyy-mm-dd hh:mi:ss')
    FROM
        dual;



    日期格式的元素

    YYYY 2004
    YEAR    TWO THOUSAND AND FOUR
    MM    02
    MONTH    JULY
    MON    JUL
    DY    MON
    DAY    MONDAY
    DD    02


       







    日期格式的元素

    HH24:MI:SS AM   15:45:32 PM

    使用双引号向日期中添加字符

    DD "of" MONTH  12 of OCTOBER


    TO_CHAR 函数对日期的转换

    SELECT
        last_name,
        TO_CHAR(hire_date,'DD Month YYYY') AS hiredate
    FROM
        employees;




    示例

    SELECT
        employee_id,
        last_name,
        hire_date
    FROM
        employees
    WHERE
        TO_CHAR(hire_date,'yyyy-mm-dd') = '1987-09-17';





    TO_DATE 函数对字符的转换

    使用 TO_DATE :

    TO_DATE(char[, 'format_model'])

    使用 TO_DATE 函数将字符转换成数字:

    TO_DATE(‘2012年10月29日 08:10:21’,’yyyy“年”mm”月”dd“日”hh:mi:ss’) From dual
    • TO_CHAR函数对数字的转换
    • TO_CHAR(number, 'format_model')

    TO_CHAR 函数中经常使用的几种格式:


    9   
    数字
    0  零
    $ 美元符
    L 本地货币符号
    . 小数点
    , 千位符



    示例

    SELECT
        TO_CHAR(salary,'$99,999.00') salary
    FROM
        employees
    WHERE
        last_name = 'Ernst';



    TO_NUMBER 函数对字符的转换

    • 使用 TO_NUMBER 函数将字符转换成日期:
    TO_NUMBER(char[, 'format_model'])

    使用 TO_NUMBER :

    TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’) from dual

    通用函数

    这些函数适用于任何数据类型,同时也适用于空值:

    NVL (expr1, expr2)
    NVL2 (expr1, expr2, expr3)
    NULLIF (expr1, expr2)
    COALESCE (expr1, expr2, ..., exprn)

    NVL 函数

    • 将空值转换成一个已知的值
    • 可以使用的数据类型有日期、字符、数字。

    函数的一般形式:

    • NVL(commission_pct,0)
    • NVL(hire_date,'01-JAN-97')
    • NVL(job_id,'No Job Yet')

    示例:

    SELECT
        last_name,
        salary,
        nvl(commission_pct,0),
        ( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal
    FROM
        employees;




    使用 NVL2 函数

    • NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
    • exp1 != null ? exp2 : exp3


    示例:

    SELECT
        last_name,
        salary,
        commission_pct,
        nvl2(commission_pct,'SAL+COMM','SAL') income
    FROM
        employees
    WHERE
        department_id IN (
            50,
            80
        );




    使用 NULLIF 函数

    • NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1
    SELECT
        first_name,
        length(first_name) "expr1",
        last_name,
        length(last_name) "expr2",
        nullif(length(first_name),length(last_name) ) result
    FROM
        employees;



    使用 COALESCE 函数

    • COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。
    • 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
    SELECT
        last_name,
        commission_pct,
        salary,
        coalesce(commission_pct,salary,1) comm
    FROM
        employees
    ORDER BY
        commission_pct;



    条件表达式

    • 在 SQL 语句中使用IF-THEN-ELSE 逻辑


    使用两种方法:

    •     CASE 表达式
    •     DECODE 函数



    CASE 表达式

    • 在需要使用 IF-THEN-ELSE 逻辑时:
    CASE expr WHEN comparison_expr1 THEN return_expr1
             [WHEN comparison_expr2 THEN return_expr2
              WHEN comparison_exprn THEN return_exprn
              ELSE else_expr]
    END


    示例:

    SELECT
        last_name,
        job_id,
        salary,
        CASE job_id
                WHEN 'IT_PROG'    THEN 1.10 * salary
                WHEN 'ST_CLERK'   THEN 1.15 * salary
                WHEN 'SA_REP'     THEN 1.20 * salary
                ELSE salary
            END
        "REVISED_SALARY"
    FROM
        employees;



    DECODE 函数

    • 在需要使用 IF-THEN-ELSE 逻辑时:
    DECODE(col|expression, search1, result1 ,
                         [, search2, result2,...,]
                         [, default])

    示例

    SELECT
        last_name,
        job_id,
        salary,
        DECODE(job_id,'IT_PROG',1.10 * salary,'ST_CLERK',1.15 * salary,'SA_REP',1.20 * salary,salary) AS revised_salary
    FROM
        employees;

    示例:

    SELECT
        last_name,
        salary,
        DECODE(trunc(salary / 2000,0),0,0.00,1,0.09,2,0.20,3,0.30,4,0.40,5,0.42,6,0.44,0.45) tax_rate
    FROM
        employees
    WHERE
        department_id = 80;


    嵌套函数

    • 单行函数可以嵌套。
    • 嵌套函数的执行顺序是由内到外。





    示例

    SELECT
        last_name,
        nvl(TO_CHAR(manager_id),'No Manager')
    FROM
        employees
    WHERE
        manager_id IS NULL;

  • 相关阅读:
    Python教程(2.2)——数据类型与变量
    Python教程(2.1)——控制台输入
    Python教程(1.2)——Python交互模式
    (译)割点
    Python教程(1.1)——配置Python环境
    Python教程(0)——介绍
    [HDU1020] Encoding
    [HDU1004] Let the balloon rise
    扩展中国剩余定理 exCRT 学习笔记
    51nod 1943 联通期望 题解【枚举】【二进制】【概率期望】【DP】
  • 原文地址:https://www.cnblogs.com/loaderman/p/11732492.html
Copyright © 2020-2023  润新知