MySQL的一些常用函数
1. 日期和时间函数
CURDATE()
: 返回当前日期。CURTIME()
: 返回当前时间。NOW()
: 返回当前日期和时间。DATE()
: 提取日期部分。DATEDIFF(date1, date2)
: 计算两个日期之间的天数差。TIMEDIFF(time1, time2)
: 计算两个时间之间的差值。DATE_ADD(date, INTERVAL expr unit)
: 在日期上增加一个时间间隔。DATE_SUB(date, INTERVAL expr unit)
: 在日期上减少一个时间间隔。
2. 字符串函数
CONCAT(str1, str2, ...)
: 连接多个字符串。LOWER(str)
: 将字符串转换为小写。UPPER(str)
: 将字符串转换为大写。SUBSTRING(str, pos, len)
: 提取子字符串。LENGTH(str)
: 返回字符串的长度。TRIM(str)
: 去除字符串两端的空格。REPLACE(str, find_str, replace_str)
: 替换字符串中的子字符串。LEFT(str, len)
: 从字符串左侧提取指定长度的子字符串。RIGHT(str, len)
: 从字符串右侧提取指定长度的子字符串。CONVERT(str, UNSIGNED)
: 将字符串转换为无符号整数,可以用于排序
3. 数学函数
ABS(x)
: 返回绝对值。ROUND(x, d)
: 四舍五入到小数点后 d 位。RAND()
: 返回一个随机数。MOD(x, y)
: 返回 x 除以 y 的余数。POW(x, y)
: 返回 x 的 y 次方。SQRT(x)
: 返回 x 的平方根。
4. 聚合函数
COUNT(column)
: 计算指定列的行数。SUM(column)
: 计算指定列的总和。AVG(column)
: 计算指定列的平均值。MAX(column)
: 返回指定列的最大值。MIN(column)
: 返回指定列的最小值。
5. 控制流函数
IF(condition, value_if_true, value_if_false)
: 条件判断。CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END
: 复杂条件判断。COALESCE(expr1, expr2, ...)
: 返回第一个非 NULL 的表达式值。
6. 其他常用函数
IFNULL(expr1, expr2)
: 如果 expr1 是 NULL,则返回 expr2,否则返回 expr1。NULLIF(expr1, expr2)
: 如果 expr1 等于 expr2,则返回 NULL,否则返回 expr1。
7.子查询
7.1 子查询作为列
示例
假设我们想在查询结果中显示每个员工的工资以及其所在部门的平均工资。
SELECT
e.first_name,
e.last_name,
e.salary,
(SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
) AS avg_dept_salary
FROM employees e;
7.2 子查询作为表
示例
假设我们想找出每个部门的最高工资和最低工资。
SELECT d.department_name, max_salary, min_salary
FROM departments d
JOIN (
SELECT department_id, MAX(salary) AS max_salary, MIN(salary) AS min_salary
FROM employees
GROUP BY department_id
) subq
ON d.department_id = subq.department_id;
示例
以下是一些示例,展示如何在 SQL 查询中使用这些函数:
-- 获取当前日期
SELECT CURDATE();
-- 计算两个日期之间的天数差
SELECT DATEDIFF('2025-12-01', CURDATE()) AS days_difference;
-- 连接字符串
SELECT CONCAT('Hello, ', 'World!');
-- 计算指定列的总和
SELECT SUM(salary) AS total_salary FROM employees;
-- 条件判断
SELECT IF(salary > 50000, 'High', 'Low') AS salary_level FROM employees;
-- 复杂条件判断
SELECT
CASE
WHEN age < 18 THEN 'Minor'
WHEN age BETWEEN 18 AND 60 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM users;
这些函数和方法在日常的数据库操作中非常有用,可以帮助你更高效地处理和分析数据。