MYSQL 使用心得
一、字符串函数
1. CONCAT(str1, str2, ...)
作用:拼接多个字符串
示例:合并姓名和邮箱
SELECT CONCAT(name, ' - ', email) AS user_info FROM users;
2. SUBSTRING(str, start, length)
或 SUBSTR()
作用:截取子字符串
示例:提取手机号前3位
SELECT SUBSTRING(phone, 1, 3) AS prefix FROM customers;
3. LENGTH(str)
或 CHAR_LENGTH()
作用:计算字符串长度
示例:过滤用户名长度超过10的用户
SELECT username FROM users WHERE CHAR_LENGTH(username) > 10;
4. UPPER(str)
/ LOWER(str)
作用:转换大小写
示例:统一城市名为大写
SELECT UPPER(city) AS city_upper FROM locations;
5. TRIM([remstr FROM] str)
作用:去除前后空格或指定字符
示例:清理用户输入的空格
SELECT TRIM(' Hello MySQL ') AS cleaned; -- 输出 'Hello MySQL'
二、数值函数
1. ROUND(num, decimals)
作用:四舍五入到指定小数位
示例:计算平均价格保留两位小数
SELECT ROUND(AVG(price), 2) AS avg_price FROM products;
2. CEIL(num)
/ FLOOR(num)
作用:向上/向下取整
示例:计算运费(不足1kg按1kg计)
SELECT CEIL(weight) AS shipping_weight FROM orders;
3. RAND()
作用:生成0~1之间的随机数
示例:随机抽取5条记录
SELECT * FROM users ORDER BY RAND() LIMIT 5;
4. MOD(n, m)
作用:取模运算
示例:筛选偶数ID的用户
SELECT * FROM users WHERE MOD(id, 2) = 0;
三、日期时间函数
1. NOW()
/ CURDATE()
/ CURTIME()
作用:获取当前日期时间
示例:记录订单创建时间
INSERT INTO orders (product_id, created_at) VALUES (1001, NOW());
2. DATE_FORMAT(date, format)
作用:格式化日期
示例:显示日期为 "2023年08月25日"
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日') AS date_cn FROM orders;
3. DATEDIFF(end, start)
作用:计算两个日期差值(天数)
示例:统计用户注册时长
SELECT DATEDIFF(NOW(), signup_date) AS days FROM users;
4. DATE_ADD(date, INTERVAL expr unit)
作用:日期加减
示例:计算7天后的到期日
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS expire_date;
四、聚合函数
1. COUNT(expr)
作用:统计行数
示例:统计活跃用户数
SELECT COUNT(*) AS active_users FROM users WHERE last_login > '2023-01-01';
2. SUM(expr)
/ AVG(expr)
作用:求和/平均值
示例:计算部门总薪资和平均年龄
SELECT department, SUM(salary) AS total_salary, AVG(age) AS avg_age FROM employees GROUP BY department;
3. MAX(expr)
/ MIN(expr)
作用:取最大/最小值
示例:查找最贵商品价格
SELECT MAX(price) AS max_price FROM products;
五、条件判断函数
1. IF(condition, true_value, false_value)
作用:简单条件判断
示例:标记高单价商品
SELECT product_name, IF(price > 1000, '高价', '普通') AS price_level FROM products;
2. CASE WHEN
作用:多条件分支
示例:分类用户年龄段
SELECT name, CASE WHEN age < 18 THEN '未成年' WHEN age BETWEEN 18 AND 60 THEN '成年' ELSE '老年' END AS age_group FROM users;
3. COALESCE(expr1, expr2, ...)
作用:返回第一个非NULL值
示例:处理未填写电话号码的用户
SELECT COALESCE(phone, '未填写') AS contact FROM customers;
六、其他实用函数
1. GROUP_CONCAT(expr)
作用:合并分组内的字符串
示例:列出每个部门的员工姓名
SELECT department, GROUP_CONCAT(name SEPARATOR ', ') AS employees FROM employees GROUP BY department;
2. JSON_EXTRACT(json_doc, path)
作用:提取JSON字段(MySQL 5.7+)
示例:解析用户地址JSON
SELECT JSON_EXTRACT(profile, '$.address.city') AS city FROM users;
实战综合示例
场景:生成用户报告
SELECT id, UPPER(SUBSTRING(name, 1, 1)) AS initial, -- 首字母大写 CONCAT(FLOOR(age/10)*10, '后') AS age_group, -- 80后/90后 DATE_FORMAT(last_login, '%Y-%m') AS login_month, CASE WHEN total_orders > 10 THEN 'VIP' WHEN total_orders > 5 THEN '活跃' ELSE '普通' END AS user_level FROM user_stats;
总结表格:高频函数速查
类型 | 函数 | 典型应用场景 |
---|---|---|
字符串 | CONCAT | 合并多字段信息 |
数值 | ROUND | 金额/评分四舍五入 |
日期 | DATE_FORMAT | 格式化日期显示 |
聚合 | COUNT + GROUP BY | 统计分组数据 |
条件 | CASE WHEN | 多条件数据分类 |
高级处理 | GROUP_CONCAT | 合并分组文本 |
掌握这些函数可覆盖80%的日常数据处理需求,建议结合业务场景多加练习!