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

2021-10-31  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读