课程 3.1 · 阅读时间:~8 分钟
在本课程中,您将探索 SQL 函数的主题,并学习内置函数如何直接在查询中转换数据。我们将涵盖核心语法、函数类别和基于 Sakila 的实际示例。到课程结束时,您将能够自信地在真实分析工作流中应用 SQL 函数。
内置 SQL 函数
在之前的课程中,您学习了如何选择、过滤和排序行。下一步是在查询中计算和转换值,而无需额外的应用程序处理。
这正是内置 SQL 函数最有用的地方:它们使查询更具表现力,减少重复逻辑,并加快报告准备。
什么是内置 SQL 函数
内置 SQL 函数是 DBMS 提供的预定义操作。它接受参数并返回一个新值,例如文本、数字、日期或布尔结果。
当您需要时,使用函数:
- 规范化文本值;
- 在 SQL 中执行计算;
- 提取字符串或日期的部分;
- 在数据类型之间转换值。
基本语法
FUNCTION_NAME(argument1, argument2, ...)
其中:
FUNCTION_NAME是函数名称;argument1, argument2, ...是列、字面量或其他函数的结果。
简单的函数调用示例:
SELECT
UPPER(first_name) AS upper_name
FROM customer
LIMIT 5;
结果:每个 first_name 值被转换为大写。
您还可以使用嵌套函数调用,其中一个函数作为参数传递给另一个函数。
嵌套函数调用示例:
SELECT
UPPER(TRIM(first_name)) AS normalized_name
FROM customer
LIMIT 5;
结果:去除前后的空格,然后将名称转换为大写。
函数常用的位置
SELECT 中的函数
在 SELECT 中,函数帮助塑造输出。
SELECT
customer_id,
CONCAT(first_name, ' ', last_name) AS full_name,
UPPER(email) AS email_upper
FROM customer
LIMIT 10;
注意:此示例仅使用一个表,并展示了函数如何直接在 SELECT 中格式化输出列。
WHERE 中的函数
在 WHERE 中,函数支持基于计算条件的过滤。
SELECT
title,
rental_duration
FROM film
WHERE LENGTH(title) >= 15
AND ABS(rental_duration - 5) <= 2
ORDER BY title;
结果:返回标题较长且租赁时长接近 5 天的电影。
SQL 函数的主要类型
字符串函数
示例:UPPER、LOWER、TRIM、SUBSTRING、CONCAT。
用于清理和格式化文本字段。
数学函数
示例:ROUND、ABS、CEILING、FLOOR、MOD。
用于计算、舍入和数字控制。
日期和时间函数
示例:NOW、CURRENT_DATE、YEAR、MONTH、DATE_ADD、DATEDIFF。
用于基于时间的分析和区间计算。
类型转换函数
示例:CAST、CONVERT。
用于当值必须显式转换为正确类型时。
实用建议
- 始终在您的 DBMS 中验证函数行为:语法和细节可能有所不同。
- 使用
AS别名使计算列更易于阅读。 - 考虑
NULL值,因为函数结果可能变为NULL。 - 避免在一个查询中使用深度嵌套的函数;将复杂逻辑分解为多个步骤。
本课的关键要点:
- 内置 SQL 函数让您可以直接在查询中处理数据。
SELECT中的函数塑造输出,而WHERE中的函数提高过滤精度。- 字符串、数学、日期/时间和转换函数涵盖了大多数核心需求。
- 正确处理数据类型和
NULL对于可预测的结果至关重要。 - 使用得当的函数使 SQL 查询更短、更清晰,并更有利于分析。
面试问题
什么是内置 SQL 函数,它有什么用?
内置 SQL 函数是 DBMS 提供的预定义操作。它的用处在于允许您直接在查询中转换、计算和格式化数据。
为什么 SQL 函数通常在 SELECT 和 WHERE 中使用?
在 SELECT 中,函数帮助格式化或计算输出值。在 WHERE 中,它们帮助使用计算条件过滤行。
什么是嵌套函数调用,何时应该使用它?
嵌套函数调用意味着将一个函数的结果传递给另一个函数。当数据需要多个转换步骤时使用,例如 UPPER(TRIM(first_name))。
在下一课中,我们将重点学习 SQL 字符串函数,并学习如何有效清理和转换文本数据。