目录
2. SUBSTRING() / SUBSTR() - 截取字符串
3. LENGTH() / CHAR_LENGTH() - 字符串长度
1. NOW() / CURDATE() / CURTIME()
4. DATE_ADD() / DATE_SUB() - 日期加减
5. YEAR() / MONTH() / DAY() - 提取日期部分
3. IFNULL() / COALESCE() - 处理NULL值
4. GREATEST() / LEAST() - 最大/最小值
一、字符串函数
1. CONCAT() - 连接字符串
SELECT CONCAT('Hello', ' ', 'World'); -- 输出: Hello World
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
2. SUBSTRING() / SUBSTR() - 截取字符串
SELECT SUBSTRING('MySQL Tutorial', 7, 8); -- 从第7个字符开始截取8个字符,输出: Tutorial
SELECT SUBSTR(column_name, 1, 5) FROM table_name;
3. LENGTH() / CHAR_LENGTH() - 字符串长度
SELECT LENGTH('MySQL'); -- 返回字节数(5)
SELECT CHAR_LENGTH('MySQL'); -- 返回字符数(5)
4. UPPER() / LOWER() - 大小写转换
SELECT UPPER('mysql'); -- 输出: MYSQL
SELECT LOWER('MySQL'); -- 输出: mysql
5. TRIM() - 去除空格
SELECT TRIM(' MySQL '); -- 输出: 'MySQL'
SELECT LTRIM(' MySQL '); -- 去除左边空格
SELECT RTRIM(' MySQL '); -- 去除右边空格
二、数值函数
1. ROUND() - 四舍五入
SELECT ROUND(123.4567, 2); -- 输出: 123.46
SELECT ROUND(column_name, 0) FROM table_name;
2. CEIL() / FLOOR() - 向上/向下取整
SELECT CEIL(123.45); -- 输出: 124
SELECT FLOOR(123.45); -- 输出: 123
3. ABS() - 绝对值
SELECT ABS(-123); -- 输出: 123
4. MOD() - 取模
SELECT MOD(10, 3); -- 输出: 1
5. RAND() - 随机数
SELECT RAND(); -- 返回0-1之间的随机数
SELECT FLOOR(RAND() * 100); -- 返回0-99的随机整数
三、日期和时间函数
1. NOW() / CURDATE() / CURTIME()
SELECT NOW(); -- 当前日期和时间,格式: YYYY-MM-DD HH:MM:SS
SELECT CURDATE(); -- 当前日期
SELECT CURTIME(); -- 当前时间
2. DATE_FORMAT() - 格式化日期
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 输出: 2023-04-15
SELECT DATE_FORMAT(NOW(), '%H:%i:%s'); -- 输出: 14:30:45
3. DATEDIFF() - 日期差
SELECT DATEDIFF('2023-04-20', '2023-04-15'); -- 输出: 5
4. DATE_ADD() / DATE_SUB() - 日期加减
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); -- 7天后
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); -- 1个月前
5. YEAR() / MONTH() / DAY() - 提取日期部分
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
四、聚合函数
1. COUNT() - 计数
SELECT COUNT(*) FROM employees; -- 总行数
SELECT COUNT(DISTINCT department) FROM employees; -- 不重复计数
2. SUM() - 求和
SELECT SUM(salary) FROM employees;
3. AVG() - 平均值
SELECT AVG(salary) FROM employees;
4. MAX() / MIN() - 最大/最小值
SELECT MAX(salary), MIN(salary) FROM employees;
5. GROUP_CONCAT() - 分组连接
SELECT department, GROUP_CONCAT(employee_name)
FROM employees
GROUP BY department;
五、条件函数
1. IF() - 简单条件判断
SELECT IF(salary > 5000, 'High', 'Low') AS salary_level FROM employees;
2. CASE WHEN - 多条件判断
SELECT
employee_name,
CASE
WHEN salary < 3000 THEN 'Low'
WHEN salary BETWEEN 3000 AND 6000 THEN 'Medium'
ELSE 'High'
END AS salary_level
FROM employees;
3. IFNULL() / COALESCE() - 处理NULL值
SELECT IFNULL(bonus, 0) FROM employees; -- 如果bonus为NULL则返回0
SELECT COALESCE(bonus, salary, 0) FROM employees; -- 返回第一个非NULL值
六、其他实用函数
1. IN() - 值列表匹配
SELECT * FROM products WHERE category_id IN (1, 3, 5);
2. LIKE - 模糊匹配
SELECT * FROM employees WHERE name LIKE 'J%'; -- J开头
SELECT * FROM employees WHERE name LIKE '%n'; -- n结尾
SELECT * FROM employees WHERE name LIKE '%er%'; -- 包含er
3. BETWEEN - 范围查询
SELECT * FROM products WHERE price BETWEEN 10 AND 100;
4. GREATEST() / LEAST() - 最大/最小值
SELECT GREATEST(10, 20, 30); -- 输出: 30
SELECT LEAST(10, 20, 30); -- 输出: 10
5. NULLIF() - 比较两个表达式
SELECT NULLIF(1, 1); -- 返回NULL
SELECT NULLIF(1, 2); -- 返回1