zoukankan      html  css  js  c++  java
  • 6、函数、谓词、CASE表达式

    6-1:各种各样的函数,根据用途函数可能分为算术函数、字符串函数、日期函数、转换函数和聚合函数。

    6-1-1:函数和种类

      1、算术函数:用来进行数值计算的函数

      2、字符串函数:用来进行字符串操作的函数

      3、日期函数:用来进行日期操作的函数

      4、转换函数:用来转换数据类型和值的函数

      5、聚合函数:用来进行数据聚合的函数·

    6-1-2:算术函数 

      1、四则运算:+(加法)、-(减法)、*(乘法)、/(除法)

    -- 创建SampleMath表
    CREATE TABLE SampleMath(
     m NUMERIC(10,3),  -- NUMERIC:全体位数据类型,小数位数
     n INTEGER,
     p INTEGER  
    );
    -- 插入数据
    BEGIN TRANSACTION;
    INSERT INTO SampleMath(m,n,p) VALUES(500,0,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(-180,0,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(NULL,NULL,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(NULL,7,3);
    INSERT INTO SampleMath(m,n,p) VALUES(NULL,5,2);
    INSERT INTO SampleMath(m,n,p) VALUES(NULL,4,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(8,NULL,3);
    INSERT INTO SampleMath(m,n,p) VALUES(2.27,1,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(5.555,2,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(NULL,1,NULL);
    INSERT INTO SampleMath(m,n,p) VALUES(8.76,NULL,NULL);
    COMMIT;

     2、ABS绝对值函数

      语法:ABS(数据)

    SELECT m,ABS(m) AS abs_col
    FROM SampleMath;

       ABS(NULL)的值也为NULL。

    3、MOD求余函数

        语法:MOD(被除数,除数)

    SELECT n,p,MOD(n,p) AS mod_col
    FROM SampleMath;

    4、ROUND四舍五入函数

      语法:ROUND(对象数值,保留小数的位数)

    SELECT m,n,ROUND(m,n) AS round_col
    FROM SampleMath;

    5、字符串函数

    -- 创建SampleStr表
    CREATE TABLE SampleStr(
     str1 VARCHAR(40),
     str2 VARCHAR(40),
     str3 VARCHAR(40)
    ); 
    -- 插入数据
    BEGIN TRANSACTION;
    INSERT INTO SampleStr(str1,str2,str3) VALUES('opx','rt',NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES('abc','def',NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES('山田','太郎','是你');
    INSERT INTO SampleStr(str1,str2,str3) VALUES('aaa',NULL,NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES(NULL,'xyz',NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES('@!#$%',NULL,NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES('aBC',NULL,NULL);
    INSERT INTO SampleStr(str1,str2,str3) VALUES('abc太郎','abc','ABC');
    INSERT INTO SampleStr(str1,str2,str3) VALUES('abdcefabc','abc','ABC');
    INSERT INTO SampleStr(str1,str2,str3) VALUES('micmic','i','I');
    COMMIT;

      1、||拼接函数

      语法:字符串1||字符串2(NULL与任务拼接都为NULL),MySQL使用CONCAT函数

    SELECT str1,str2,str1||str2 AS str_concat --CONCAT(str1,str2)
    FROM SampleStr;

      2、LENGTH函数

      语法:LENGTH(字符串)

    SELECT str1,LENGTH(str1) as len_str
    FROM SampleStr;

      3、LOWER小写转换函数与UPPER大写转换函数

      语法:LOWER(字符串) UPPER(字符串)

    SELECT str1,LOWER(str1) AS low_str
    FROM SampleStr
    WHERE str1 IN ('ABC','aBC','abc','山田');

    SELECT str1,UPPER(str1) AS up_str
    FROM SampleStr
    WHERE str1 IN ('ABC','aBC','abc','山田');

      4、REPLACE字符串的替换  

      语法:REPLACE(对象字符串,替换前的字符串,替换后的字符串)

    SELECT str1,str2,str3,REPLACE(str1,str2,str3) AS rep_str
    FROM SampleStr;

      5、SUBSTRING字符串截取

       语法:SUBSTRING(对象字符串, FROM 截取的起始位置 FOR 截取的字符数)

    SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS sub_str
    FROM SampleStr;

    6、日期函数

      1)CURRENT_DATE当前日期函数

        语法:CURRENT_DATE

    SELECT CURRENT_DATE;--MysqlPostgresql

      2)CURRENT_TIME当前时间函数

        语法:CURRENT_TIME

    SELECT CURRENT_TIME;--MysqlPostgresql

     3)CURRENT_TIMESTAMP当前日期和时间函数

        语法:CURRENT_TIMESTAMP

    SELECT CURRENT_TIMESTAMP;--MysqlPostgresql

     4)EXTRACT截取日期元素(返回为数值型)

        语法:EXTRACT(日期元素 FROM 日期)

    -- mysqlpostgresql
    SELECT CURRENT_TIMESTAMP,
    EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,
    EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,
    EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,
    EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,
    EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,
    EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;

    6、转换函数

      1)CAST-类型转换

        语法:CAST(转换前的值 AS  想要转换的数据类型)

    --字符串转为数值类型
    --
    sql serverpostgresql SELECT CAST('0001' AS INTEGER) AS int_col; -- mysql SELECT CAST('0001' AS SIGNED INTEGER) AS int_col;

    -- 字符串转为日期类型
    -- SQL ServerMysql
    SELECT CAST('2009-12-14' AS DATE) AS date_col;

      2)COALESCE-把NULL转换为其他值

        语法:COALESCE(数据1,数据2,数据3...)

    SELECT COALESCE(NULL,1) AS col_1,
                 COALESCE(NULL,'test',NULL) AS col_2,
                 COALESCE(NULL,NULL,'2009-11-01');

    SELECT COALESCE(str2,'NULL')
    FROM SampleStr;

    6-2:谓词(返回值是真值)

      1、谓词就是返回值为真值的函数

      2、LIKE的三种方法(前方一致、中间一致、后方一致)

      3、需要注意BETWEEN包含三个参数

      4、想要取得NULL数据时间必须使用IS NULL

      5、可以把子查询作为IN和EXISTS的参数

    6-2-1:LIKE谓词-字符串的部分一致查询

    -- 创建SampleLike表
    CREATE TABLE SampleLike
    (
      strcol VARCHAR(6) NOT NULL,
      PRIMARY KEY(strcol)
    );
    
    -- 插入数据
    BEGIN TRANSACTION;-- START TRACSACTION
    INSERT INTO SampleLike(strcol) VALUES('abcddd'); INSERT INTO SampleLike(strcol) VALUES('dddabc'); INSERT INTO SampleLike(strcol) VALUES('abdddc'); INSERT INTO SampleLike(strcol) VALUES('abcdd'); INSERT INTO SampleLike(strcol) VALUES('ddabc'); INSERT INTO SampleLike(strcol) VALUES('abddc'); COMMIT;

      1、前方一致查询(%:代表0字符以上的任意字符串, _(下划线)代表1个字符)

    SELECT *
    FROM SampleLike
    WHERE strcol LIKE 'ddd%';

      2、中间一致查询

    SELECT *
    FROM SampleLike
    WHERE strcol LIKE '%ddd%';

      2、后方一致查询

    SELECT *
    FROM SampleLike
    WHERE strcol LIKE '%ddd';

    -- abc后任意2个字符
    SELECT *
    FROM SampleLike
    WHERE strcol LIKE 'abc__';

    6-2-2:BETWEEN谓词-范围查询(3个参数)

    -- 从shohin表中读出销售单价(hanbai_tanka)在100和1000之间的商品(包含100和1000两个值,如果不包含用<>)
    SELECT shohin_mei,hanbai_tanka
    FROM Shohin
    WHERE hanbai_tanka BETWEEN 100 AND 1000;

    6-2-3:IS NULLIS NOT NULL-判断是否为NULL

    -- 选取出进货单价(shiire_tanka)为NULL的商品
    SELECT shohin_mei,shiire_tanka
    FROM Shohin
    WHERE shiire_tanka IS NULL;

    6-2-4:IN谓词-OR的简便用法(IN和NOT IN无法选取出NULL数据)

    SELECT shohin_mei,shiire_tanka
    FROM Shohin
    -- WHERE shiire_tanka = 320
    -- OR shiire_tanka = 500
    -- OR shiire_tanka = 5000;
    WHERE shiire_tanka IN(320,500,5000);

    6-2-5:使用子查询作为IN谓词的参数

    6-2-6:EXIST谓词

    6-2:CASE表达式

      1、CASE表达式分为简碟CASE表达式和搜索CASE表达式两种。搜索CASE包含简碟CASE表达式全部功能

      2、CASE表达式的ELSE子句可以省略,但最好不要

      3、CASE表达式的END不参省略

      4、使用CASE表达式能把SELECT语据的结果进行组合

    6-2-1:搜索CASE表达式

      语法:CASE WHEN <判断表达式> THEN<表达式>

                   WHEN <判断表达式> THEN<表达式>

                 .....

             ELSE<表达式>

          END

    SELECT shohin_mei,
    CASE WHEN shohin_bunrui = '衣服'  THEN 'A:'||shohin_bunrui
             WHEN shohin_bunrui = '办公用品'  THEN 'B:'||shohin_bunrui      
             WHEN shohin_bunrui = '厨房用具'  THEN 'C:'||shohin_bunrui
             ELSE NULL
    END AS abc_shohin_bunrui
    FROM Shohin;       

    CASE表达式实现行列转换

    SELECT shohin_bunrui,SUM(hanbai_tanka) AS sum_tanka
    FROM Shohin
    GROUP BY shohin_bunrui;

    -- 对照商品种类计算出的销售单价合计值行行列换行
    SELECT 
    SUM(CASE WHEN shohin_bunrui = '衣服' THEN hanbai_tanka ELSE 0 END) AS sum_tanka_ihuku,
    SUM(CASE WHEN shohin_bunrui = '厨房用具' THEN hanbai_tanka ELSE 0 END) AS sum_tanka_kitchen,
    SUM(CASE WHEN shohin_bunrui = '办公用品' THEN hanbai_tanka ELSE 0 END) AS sum_tanka_jimu
    FROM Shohin;

  • 相关阅读:
    谢谢博客-园,让我不再有开源AYUI的想法
    [ay原创作品]用wpf写了个模仿36Kr网站登录背景的效果
    [AY技术分享]WPF AYUI的高大上日历代码
    [C#] AY.WPF-图形编程-高中生为起点-研究报告1
    [Aaronyang]谈谈2015年AY对WPF全面技术总结40多篇WPF,炫到没朋友的AYUI来了
    C#人爱学不学9[C#5.0异步实例+WPF自己的MVVM Async应用 1/12]
    Ay.Framework.WPF 2.0建立项目到底有多快
    [aaronyang]WPF4.5
    Hystrix是什么
    通俗理解ZooKeeper是如何保证数据一致性的
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6623512.html
Copyright © 2011-2022 走看看