第 7 章 SQL 内置函数 SQL 内置函数
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
函数是 SQL 命令集中一种特殊类型的命令字,每种 SQL 方言对该命令集的实现方式各不相同。函数的值可以由输入参数决定,例如函数可以求数据库值列表的平均值。不过,许多函数不使用任何类型的输入参数。返回当前系统时间的函数 就是这样一个例子。函数还可以返回表格或行集。这类函数通常被称为CURRENT_TIME集合返回函数。
SQL 标准支持许多有用的函数。本章和下一章将介绍这些函数,并为每个平台提供详细说明和示例。我们不会涵盖所有函数,但会重点介绍最常用的函数。此外,每个数据库都支持 SQL 标准范围之外的大量内部函数;每章末尾都列出了每个供应商的这些函数。
就 MariaDB 和 MySQL 而言,除了 MariaDB 与 MySQL 行为有偏差的情况外,我们将只提及 MySQL。
如何使用本章
研究本章中的函数时:
检查 SQL 语法并阅读说明,即使您正在寻找特定的平台实现。
阅读特定平台的实施信息。
在各平台章节中,将不讨论供应商实现中与标准无差异的内容;这些章节仅指出与标准的任何差异。有关特定平台部分未提供的详细信息,请参阅 SQL 语法部分。
功能类型
有不同的方法可以将函数分为不同的组。以下各小节介绍了对理解函数如何工作至关重要的区别。
确定性函数和非确定性函数
函数可以是确定性的,也可以是非确定性的。如果输入值相同,确定性函数总是返回相同的结果。非确定性 函数即使提供相同的输入值,每次调用也可能返回不同的结果。
为什么给定的输入总是返回相同的输出?这与如何在视图和索引、用户自定义函数以及存储过程中使用函数有关。不同的实现有不同的限制,但这些对象有时只允许在其定义代码中使用确定性函数。例如,许多数据库允许在列表达式上创建索引,但前提是表达式不包含任何非确定性函数。详情请查看平台文档。
汇总功能
对函数进行分类的另一种方法是,看它们是一次只对一行中的值进行操作,还是对一个集合中的值进行操作,或者是对一组行进行操作。聚合函数对数值集合进行操作,并返回一个汇总值。聚合函数还经常与GROUP BY 和HAVING 子句结合使用,以确定数据组的数量。我们将在下一章介绍聚合。
Windows 功能
窗口函数与聚合函数类似,都是一次对多条记录进行操作。区别在于如何定义这些记录。聚合函数对查询的GROUP BY 子句定义的记录集进行操作。而使用窗口函数时,每次函数调用都要指定记录集,因此在同一查询中对函数的不同调用可以在不同的记录集上执行。窗口函数返回的行数与开始时的行数相同,而使用聚合函数的查询结果会将分组行折叠为一个值。在很多情况下,聚合函数可以像窗口函数一样使用。在这些情况下,聚合函数和其他 Windows 函数调用一样,都有一个OVER() 子句。
SQL 函数
本章我们将重点讨论不属于聚合函数或 Windows 函数的函数。这些函数可能是确定性的,也可能是非确定性的,它们可能返回表格,也可能返回单个值。SQL 标准提供了许多函数,可用于操作集合、字符串和数字,以及检索当前用户或系统时间等系统信息。这些函数属于表 7-1 中列出的类别。
| 功能类别 ... |
|---|