SQL 内置函数
第 3.1 课 · 阅读时间:约 8 分钟 · 练习题 ↓
在本课中,你将了解 SQL 函数,学习内置函数如何直接在查询中转换数据。我们会介绍基本语法、函数分类以及基于 Sakila 的实用示例。学完后,你将能够在实际分析工作中熟练运用 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 中的标量函数和聚合函数有什么区别?
标量函数(如 UPPER 或 ROUND)每次处理一行,并为每一行返回一个值。聚合函数(如 COUNT、SUM 或 AVG)把多行合并成一个值,通常与 GROUP BY 一起使用。本课讲的是标量函数,聚合函数在单独的课程中介绍。
SQL 函数在所有数据库中的用法都一样吗?
核心函数是一样的:UPPER、LOWER、TRIM、ROUND、ABS 和 CAST 几乎在所有数据库中都有。许多其他函数则因数据库而异:当前日期在 MySQL 和 PostgreSQL 中是 NOW(),在 SQL Server 中是 GETDATE();DATEDIFF 在 MySQL 和 SQL Server 中的参数也不同。迁移查询时请查阅所用数据库的文档。
参数为 NULL 时,SQL 函数返回什么?
大多数函数返回 NULL:UPPER(NULL)、ROUND(NULL) 和 LENGTH(NULL) 的结果都是 NULL。在 MySQL 中,只要有一个参数是 NULL,CONCAT 就返回 NULL,而 CONCAT_WS 会跳过 NULL 值。如果需要默认值,可以用 COALESCE(column, 'default') 包裹该列。
面试问题
什么是 SQL 内置函数,它有什么用?
SQL 内置函数是 DBMS 提供的预定义操作。它的用处在于能直接在查询中转换、计算和格式化数据。
为什么 SQL 函数在 SELECT 和 WHERE 中都很常用?
在 SELECT 中,函数用于格式化或计算输出值。在 WHERE 中,函数用于根据计算条件过滤行。
什么是嵌套函数调用,什么时候使用?
嵌套函数调用是指把一个函数的结果传给另一个函数。当数据需要多个转换步骤时使用,例如 UPPER(TRIM(first_name))。