SQL函数大集锦

149 阅读4分钟

SQL 提供了很多不同类型的函数,用于在查询中处理和操作数据。SQL 函数通常可以分为以下几类:

  1. 聚合函数(Aggregate Functions)
  2. 字符串函数(String Functions)
  3. 数值函数(Numeric Functions)
  4. 日期和时间函数(Date and Time Functions)
  5. 条件函数(Conditional Functions)
  6. 转换函数(Conversion Functions)
  7. 窗口函数(Window Functions)
  8. 其他函数(如:JSON、NULL 等函数)

下面是一些常见 SQL 函数的详细用法:


1. 聚合函数(Aggregate Functions)

这些函数通常用于对结果集的多个行进行计算,返回一个单一的值。

  • COUNT() :返回符合条件的行数
SELECT COUNT(*) FROM employees;
  • SUM() :返回列中所有数值的总和
SELECT SUM(salary) FROM employees;
  • AVG() :返回列的平均值
SELECT AVG(salary) FROM employees;
  • MAX() :返回列中的最大值
SELECT MAX(salary) FROM employees;
  • MIN() :返回列中的最小值
SELECT MIN(salary) FROM employees;
  • GROUP_CONCAT() :将多行数据连接为一个字符串
SELECT GROUP_CONCAT(name) FROM employees;

2. 字符串函数(String Functions)

用于处理字符串数据的函数。

  • CONCAT() :连接两个或多个字符串
SELECT CONCAT(first_name, ' ', last_name) FROM employees;
  • LENGTH() :返回字符串的长度
SELECT LENGTH(name) FROM employees;
  • SUBSTRING() :从字符串中提取子字符串
SELECT SUBSTRING(name, 1, 3) FROM employees;
  • UPPER() :将字符串转换为大写
SELECT UPPER(name) FROM employees;
  • LOWER() :将字符串转换为小写
SELECT LOWER(name) FROM employees;
  • TRIM() :去除字符串两端的空白字符
SELECT TRIM(' ' FROM name) FROM employees;
  • REPLACE() :替换字符串中的部分内容
SELECT REPLACE(name, 'John', 'Mike') FROM employees;

3. 数值函数(Numeric Functions)

用于处理数值数据的函数。

  • ABS() :返回数字的绝对值
SELECT ABS(-10);
  • ROUND() :四舍五入数字
SELECT ROUND(123.456, 2); -- 结果: 123.46
  • FLOOR() :返回小于等于指定数字的最大整数
SELECT FLOOR(123.456);
  • CEIL() 或 CEILING() :返回大于等于指定数字的最小整数
SELECT CEIL(123.456);
  • RAND() :返回一个随机的浮动值(通常在 0 和 1 之间)
SELECT RAND();

4. 日期和时间函数(Date and Time Functions)

用于处理日期和时间数据的函数。

  • NOW() :返回当前的日期和时间
SELECT NOW();
  • CURDATE() :返回当前的日期
SELECT CURDATE();
  • CURTIME() :返回当前的时间
SELECT CURTIME();
  • DATE() :从日期时间中提取日期部分
SELECT DATE('2025-01-11 12:30:00');
  • YEAR() :返回日期中的年份部分
SELECT YEAR('2025-01-11');
  • MONTH() :返回日期中的月份部分
SELECT MONTH('2025-01-11');
  • DAY() :返回日期中的天部分
SELECT DAY('2025-01-11');
  • DATEDIFF() :返回两个日期之间的差值(天数)
SELECT DATEDIFF('2025-01-11', '2025-01-01');
  • DATE_ADD() :在日期上加上指定的时间间隔
SELECT DATE_ADD('2025-01-01', INTERVAL 5 DAY);

5. 条件函数(Conditional Functions)

用于基于条件选择结果的函数。

  • IF() :在 SQL 中执行条件判断
SELECT IF(salary > 50000, 'High', 'Low') FROM employees;
  • CASE:执行更复杂的条件判断
SELECT CASE
         WHEN salary > 50000 THEN 'High'
         WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium'
         ELSE 'Low'
       END AS salary_level
FROM employees;

6. 转换函数(Conversion Functions)

用于转换数据类型的函数。

  • CAST() :转换数据类型
SELECT CAST(salary AS CHAR) FROM employees;
  • CONVERT() :转换数据类型(通常与 CAST() 类似)
SELECT CONVERT(salary, CHAR) FROM employees;

7. 窗口函数(Window Functions)

这些函数在查询结果的“窗口”中计算值,而无需聚合整个表。

  • ROW_NUMBER() :返回结果集中的行号
SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, name, salary
FROM employees;
  • RANK() :为每一行分配排名
SELECT RANK() OVER (ORDER BY salary DESC) AS rank, name, salary
FROM employees;
  • DENSE_RANK() :分配排名,跳过相同排名值的行
SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank, name, salary
FROM employees;
  • NTILE() :将数据分为指定数量的桶
SELECT NTILE(4) OVER (ORDER BY salary DESC) AS quartile, name, salary
FROM employees;

8. 其他函数

  • ISNULL() 或 COALESCE() :处理 NULL 值,不是空值,返回原本值,是空值,返回替代值0
SELECT ISNULL(salary, 0) FROM employees;
  • JSON_EXTRACT() :提取 JSON 字段中的数据
SELECT JSON_EXTRACT(details, '$.address.city') FROM users;

        这些函数在不同的 SQL 数据库(如 MySQL、PostgreSQL、SQL Server、Oracle)中可能略有差异,因此在具体使用时应参考相应的数据库文档。