mysql的函数(第一期)
一、字符串函数
处理文本数据,常用函数:
-  
CONCAT(str1, str2, ...)
- 作用:拼接字符串。
 - 示例:
SELECT CONCAT('Hello', ' ', 'World');→Hello World - 注意:若任一参数为 
NULL,结果为NULL。 
 -  
CONCAT_WS(separator, str1, str2, ...)
- 作用:用分隔符拼接字符串,自动忽略 
NULL。 - 示例:
SELECT CONCAT_WS('-', '2023', NULL, '10');→2023-10 
 - 作用:用分隔符拼接字符串,自动忽略 
 -  
SUBSTRING(str, start, length)
- 作用:截取子串,索引从 
1开始。 - 示例:
SELECT SUBSTRING('MySQL', 3, 2);→SQ 
 - 作用:截取子串,索引从 
 -  
REPLACE(str, from_str, to_str)
- 作用:替换字符串中的子串。
 - 示例:
SELECT REPLACE('foo bar', 'foo', 'hello');→hello bar 
 -  
TRIM([LEADING|TRAILING|BOTH] trim_str FROM str)
- 作用:去除首尾空格或指定字符。
 - 示例:
SELECT TRIM(' MySQL ');→MySQL 
 -  
LENGTH(str) 与 CHAR_LENGTH(str)
- 区别:
LENGTH返回字节数,CHAR_LENGTH返回字符数。 - 示例:
SELECT LENGTH('中文'), CHAR_LENGTH('中文');→6, 2(UTF-8编码) 
 - 区别:
 
二、数值函数
处理数值计算,常用函数:
-  
ROUND(num, decimals)
- 作用:四舍五入,
decimals可为负数。 - 示例:
SELECT ROUND(123.456, -1), ROUND(123.456, 2);→120, 123.46 
 - 作用:四舍五入,
 -  
CEIL(num) 与 FLOOR(num)
- 作用:向上/向下取整。
 - 示例:
SELECT CEIL(3.1), FLOOR(3.9);→4, 3 
 -  
RAND()
- 作用:生成 
[0,1)的随机数。 - 示例:
SELECT RAND();→ 随机值如0.123 - 注意:结合 
ORDER BY RAND()可随机排序,但性能较差。 
 - 作用:生成 
 -  
POW(x, y)
- 作用:计算 
x的y次方。 - 示例:
SELECT POW(2, 3);→8 
 - 作用:计算 
 
三、日期时间函数
处理日期和时间,常用函数:
-  
NOW()
- 作用:返回当前日期和时间(格式:
YYYY-MM-DD HH:mm:ss)。 - 示例:
SELECT NOW();→2023-10-10 14:30:00 
 - 作用:返回当前日期和时间(格式:
 -  
DATE_FORMAT(date, format)
- 作用:格式化日期。
 - 示例:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');→2023-10-10 
 -  
DATEDIFF(date1, date2)
- 作用:计算两个日期相差的天数。
 - 示例:
SELECT DATEDIFF('2023-10-10', '2023-10-01');→9 
 -  
DATE_ADD(date, INTERVAL expr unit)
- 作用:日期加法。
 - 示例:
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);→ 当前日期加一个月。 
 -  
EXTRACT(unit FROM date)
- 作用:提取日期部分(如年、月、日)。
 - 示例:
SELECT EXTRACT(YEAR FROM '2023-10-10');→2023 
 
四、流程控制函数
处理条件逻辑:
-  
IF(condition, value_if_true, value_if_false)
- 示例:
SELECT IF(score >= 60, 'Pass', 'Fail'); 
 - 示例:
 -  
CASE
- 作用:多条件分支。
 - 示例: 
SELECT CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'ELSE 'C'END AS grade FROM students; 
 -  
COALESCE(value1, value2, ...)
- 作用:返回第一个非 
NULL值。 - 示例:
SELECT COALESCE(NULL, 'default');→default 
 - 作用:返回第一个非 
 
五、聚合函数
对多行数据进行统计:
-  
SUM(column)
- 作用:求和,忽略 
NULL。 
 - 作用:求和,忽略 
 -  
COUNT(expr)
- 示例:
COUNT(*)统计行数,COUNT(DISTINCT column)去重计数。 
 - 示例:
 -  
GROUP_CONCAT(expr)
- 作用:合并多行结果,默认逗号分隔。
 - 示例:
SELECT GROUP_CONCAT(name SEPARATOR '|') FROM users; 
 -  
AVG(column) 与 MAX(column)/MIN(column)
- 注意:
AVG忽略NULL,MAX/MIN适用于数值、日期和字符串。 
 - 注意:
 
六、加密函数
-  
MD5(str) 与 SHA1(str)
- 示例:
SELECT MD5('password');→ 32位哈希值。 
 - 示例:
 -  
SHA2(str, hash_length)
- 示例:
SELECT SHA2('password', 256);→ 64位哈希值。 
 - 示例:
 
七、注意事项
- 索引失效:避免在 
WHERE中对索引列使用函数(如WHERE YEAR(date) = 2023)。 - NULL 处理:函数如 
SUM忽略NULL,而CONCAT遇到NULL返回NULL。 - 版本差异:窗口函数(如 
ROW_NUMBER())仅支持 MySQL 8.0+。 - 性能优化:谨慎使用 
ORDER BY RAND()或大文本处理函数。 
八、自定义函数
通过 CREATE FUNCTION 可定义存储函数,需注意权限和语法:
DELIMITER $$
CREATE FUNCTION add_tax(price FLOAT) RETURNS FLOAT
BEGINRETURN price * 1.1;
END 
$$
DELIMITER ;