目录
SQL 函数简介
SQL 函数是用于处理数据的内置操作,允许你在查询中对数据进行处理、转换或计算。SQL 提供了多种函数类型,常见的包括聚合函数、字符函数、数学函数、日期和时间函数、转换函数等。函数可以用于 SELECT
语句、WHERE
子句、ORDER BY
子句等。
SQL 函数大体上可以分为两类:
- 标量函数(Scalar Functions):返回单个值。
- 聚合函数(Aggregate Functions):返回一组值的计算结果。
常见的 SQL 函数
1. 聚合函数
聚合函数用于对一组数据进行计算,返回单个值。常见的聚合函数有:
- COUNT():返回某个列中非
NULL
值的数量。 - SUM():返回某列的总和(通常用于数字类型列)。
- AVG():返回某列的平均值。
- MIN():返回某列的最小值。
- MAX():返回某列的最大值。
示例
SELECT COUNT(*) FROM employees;
SELECT AVG(salary) FROM employees WHERE department = 'IT';
2. 字符函数
字符函数用于处理字符串数据,常见的字符函数包括:
- CONCAT():连接两个或多个字符串。
- LENGTH() 或 LEN():返回字符串的长度。
- UPPER():将字符串转换为大写。
- LOWER():将字符串转换为小写。
- TRIM():去除字符串两端的空白字符。
- SUBSTRING() 或 SUBSTR():提取字符串的一部分。
- REPLACE():替换字符串中的某些字符。
- INSTR():返回子字符串在字符串中首次出现的位置。
示例
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
SELECT UPPER(name) FROM customers;
SELECT SUBSTRING(address, 1, 10) FROM customers;
3. 数学函数
数学函数用于对数字进行各种数学运算,常见的数学函数包括:
- ROUND():四舍五入某个数字。
- CEIL() 或 CEILING():返回大于或等于给定数字的最小整数。
- FLOOR():返回小于或等于给定数字的最大整数。
- ABS():返回数字的绝对值。
- POWER():返回数字的指定幂。
- SQRT():返回数字的平方根。
示例
SELECT ROUND(price, 2) FROM products;
SELECT CEIL(price) FROM products;
SELECT ABS(-100) FROM transactions;
4. 日期和时间函数
日期和时间函数用于处理日期和时间数据,常见的日期和时间函数包括:
- NOW() 或 CURRENT_TIMESTAMP:返回当前的日期和时间。
- CURDATE() 或 CURRENT_DATE:返回当前的日期。
- CURTIME() 或 CURRENT_TIME:返回当前的时间。
- DATE_ADD() 或 DATE_SUB():对日期加上或减去指定的时间间隔。
- DATEDIFF():计算两个日期之间的天数。
- YEAR()、MONTH()、DAY():提取日期的年、月、日部分。
- EXTRACT():从日期中提取特定的时间部分,如年、月、日、小时、分钟、秒等。
示例
SELECT NOW();
SELECT DATE_ADD('2025-01-01', INTERVAL 10 DAY);
SELECT DATEDIFF('2025-01-10', '2025-01-01');
SELECT YEAR(hire_date) FROM employees;
5. 转换函数
转换函数用于数据类型之间的转换,常见的转换函数包括:
- CAST():将一个数据类型转换为另一个数据类型。
- CONVERT():与
CAST()
类似,但语法稍有不同,主要用于 MySQL 和 SQL Server。 - TO_DATE():将字符串转换为日期(在 Oracle 中使用)。
- TO_CHAR():将日期或数字转换为字符(在 Oracle 中使用)。
示例
SELECT CAST(price AS DECIMAL(10,2)) FROM products;
SELECT CONVERT(varchar, order_date, 120) FROM orders;
SELECT TO_DATE('2025-01-01', 'YYYY-MM-DD') FROM orders;
SQL 函数的使用示例
示例 1:使用聚合函数计算员工的平均薪资
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;
示例 2:使用字符函数将名字和姓氏连接成完整姓名
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
示例 3:计算某一订单的日期差
SELECT DATEDIFF(order_date, NOW()) AS days_since_order
FROM orders;
示例 4:将字符串转换为大写字母
SELECT UPPER(product_name) AS uppercase_name
FROM products;
示例 5:计算商品的价格加上10%的税
SELECT product_name, price, price * 1.10 AS price_with_tax
FROM products;
发表回复