🎯 本月只剩几天支持 SQLTest.online,帮助我们让 SQL 练习对每个人都免费。 今天捐赠 →
SQL 代码已复制到剪贴板

SQL 内置函数

第 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 中的标量函数和聚合函数有什么区别?

标量函数(如 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))。

尝试解决以下任务,以巩固您在本课中学到的内容。

  1. 税务计算