美文网首页
《SQL必知必会》第 8 课 使用函数处理数据

《SQL必知必会》第 8 课 使用函数处理数据

作者: 一条快乐的鱼儿 | 来源:发表于2021-10-31 14:44 被阅读0次

    目标:

    8.1 函数

    8.2 使用函数

    这一课介绍什么是函数,DBMS 支持何种函数,以及如何使用这些函数;还将讲解为什么 SQL 函数的使用可能会带来问题。



    8.1 函数

    可移植(portable)所编写的代码可以在多个系统上运行。


    8.2 使用函数

    大多数 SQL 实现支持以下类型的函数。

    1. 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。

    2. 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数

    3. 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。

    4. 用于生成美观好懂的输出内容的格式化函数(如用语言形式表达出日期,用货币符号和千分位表示金额)。

    5. 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数

    8.2.1 文本处理函数

    SELECT vend_name, 

                   UPPER(vend_name) AS vend_name_upcase 

    FROM Vendors 

    ORDER BY vend_name;

    输出:


    SOUNDEX() 函数

    是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。使用函数处理数据类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。虽然 SOUNDEX 不是SQL 概念,但多数 DBMS 都提供对 SOUNDEX 的支持。

    SELECT cust_name, cust_contact

    FROM Customers

    WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');

    分析▼

    在这个例子中,WHERE 子句使用 SOUNDEX()函数把 cust_contact 列值和搜索字符串转换为它们的 SOUNDEX 值。因为 Michael Green 和Michelle Green 发音相似,所以它们的 SOUNDEX 值匹配,因此 WHERE子句正确地过滤出了所需的数据。

    输出:


    8.2.2 日期和时间处理函数

    很不一致,可移植性最差。

    要求:MySQL使用名为 YEAR()的函数从日期中提取年份

    SELECT order_num

    FROM Orders

    WHERE YEAR(order_date) = 2020;

    输出:

    8.2.3 数值处理函数

    数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算,因此不像字符串或日期−时间处理函数使用那么频繁。

    在主要 DBMS 的函数中,数值函数是最一致、最统一的函数。

    8.3 小结

    这一课介绍了如何使用 SQL 的数据处理函数。虽然这些函数在格式化、处理和过滤数据中非常有用,但它们在各种 SQL 实现中很不一致。

    -- ----------第8课 使用函数处理数据---------------------

    -- 8.2.1 文本处理函数

    SELECT vend_name, UPPER(vend_name) AS vend_name_upcase

    FROM Vendors

    ORDER BY vend_name;

    SELECT cust_name, cust_contact

    FROM Customers

    WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');

    -- 8.2.2 日期和时间处理函数


    8.4 挑战题

    1. 我们的商店已经上线了,正在创建顾客账户。所有用户都需要登录名,默认登录名是其名称和所在城市的组合。编写 SQL 语句,返回顾客 ID(cust_id)、顾客名称(customer_name)和登录名(user_login),其中登录名全部为大写字母,并由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成。例如,我的登录名是 BEOAK(Ben Forta,居住在 Oak Park)。提示:需要使用函数、拼接和别名。

    SELECT cust_id, cust_name,

            CONCAT(UPPER(LEFT(cust_contact, 2)), UPPER(LEFT(cust_city, 3))) AS user_login

    FROM customers;

    2. 编写 SQL 语句,返回 2020 年 1 月的所有订单的订单号(order_num)和订单日期(order_date),并按订单日期排序。你应该能够根据目前已学的知识来解决此问题,但也可以开卷查阅 DBMS 文档。

    SELECT order_num, order_date

    FROM Orders

    WHERE YEAR(order_date) = 2020 AND MONTH(order_date) = 1

    ORDER BY order_date

    相关文章

      网友评论

          本文标题:《SQL必知必会》第 8 课 使用函数处理数据

          本文链接:https://www.haomeiwen.com/subject/xvmsaltx.html