Skip to content

SQL 函数

SQL 提供了一系列丰富的内置函数来对数据执行操作。这些函数允许您直接在 SQL 查询中进行计算、数据操作和格式化,增强了数据检索和转换的能力。

SQL 中的函数大致可分为聚合函数(aggregate functions)和标量函数(scalar functions)。某些数据库还支持高级函数,例如窗口函数(window functions)。

聚合函数对一组值(例如,一列)执行计算,并返回一个单一的汇总值。它们通常与 GROUP BY 子句一起使用,用于计算不同行组的度量。

常用的聚合函数:

  • AVG(column) - 返回数值列的平均值。
  • COUNT(column_or_) - 返回行数。COUNT(column) 计算指定列中的非 NULL 值,而 COUNT() 计算所有行。
  • MAX(column) - 返回列中的最大值。
  • MIN(column) - 返回列中的最小值。
  • SUM(column) - 返回数值列的总和。

注意:像 FIRST() 和 LAST() 这样的函数不是标准的 SQL 聚合函数。要在组中获取第一个或最后一个值,通常对排序列(如日期或 ID)使用 MIN() 或 MAX(),或者在更复杂的场景中使用窗口函数。

标量函数对单个输入值(来自单行)进行操作,并为每行返回一个输出值。它们可以在 SELECT 列表、 WHERE 子句和 ORDER BY 子句中使用。

不同数据库系统(例如,MySQL、PostgreSQL、SQL Server、Oracle)之间标量函数的可用性和语法可能差异很大。请务必查阅您使用的 RDBMS 文档以获取具体的函数名称和参数。以下是一些常见的类别和示例(推荐使用标准函数):

  • 字符串函数:
    • UPPER(string) - 将字符串转换为大写。(标准: UPPER)
    • LOWER(string) - 将字符串转换为小写。(标准: LOWER)
    • SUBSTRING(string FROM start FOR length) - 从字符串中提取子字符串。(标准: SUBSTRING。变体: SUBSTR, MID)
    • LENGTH(string) - 返回字符串的长度。(标准: LENGTH 或 CHAR_LENGTH。变体: LEN)
    • CONCAT(string1, string2, ...) - 连接两个或多个字符串。(准标准: CONCAT。操作符: 许多系统中是 ||)
    • TRIM([LEADING|TRAILING|BOTH] [character] FROM string) - 从字符串中移除指定字符(或空格)的前导/尾随/两侧部分。(标准: TRIM)
  • 数值函数:
    • ROUND(number, decimals) - 将数值字段四舍五入到指定的小数位数。(标准: ROUND)
    • ABS(number) - 返回数值的绝对值。
    • CEIL(number) / CEILING(number) - 返回大于或等于该数的最小整数。
    • FLOOR(number) - 返回小于或等于该数的最大整数。
  • 日期和时间函数:
    • CURRENT_TIMESTAMP - 返回当前系统日期和时间。(标准。变体: NOW(), GETDATE(), SYSDATE)
    • CURRENT_DATE - 返回当前系统日期。(标准)
    • CURRENT_TIME - 返回当前系统时间。(标准)
    • EXTRACT(part FROM date) - 从日期/时间值中提取一部分(例如,YEAR, MONTH, DAY)。(标准)
    • 日期格式化函数(例如,Oracle/PostgreSQL 中的 TO_CHAR,SQL Server 中的 FORMAT,MySQL 中的 DATE_FORMAT)在不同数据库系统之间差异很大。通常,为了可移植性,日期格式化最好在应用程序层处理。
  • 类型转换函数:
    • CAST(expression AS datatype) - 将表达式转换为指定的数据类型。(标准: CAST)
    • CONVERT(...) - 类似于 CAST,语法因 RDBMS 而异。

窗口函数对与当前行相关的表行集执行计算。与聚合函数不同,窗口函数不会导致行被分组为单个输出行;它们保留原始行,并为每行添加一个包含函数结果的新列。

示例包括 ROW_NUMBER()、RANK()、LAG()、LEAD(),以及在窗口上使用 SUM() 或 AVG() 等聚合函数。

提示:聚合函数和常见的标量函数将在后续章节中更详细地解释。对于特定的标量函数或窗口函数,请参阅您使用的数据库系统的文档,因为它们的实现可能有所不同。