MySQL学习笔记——函数
MySQL函数官方文档可以参考:https://dev.mysql.com/doc/refman/5.7/en/functions.html
1.内置函数和运算符
参考:https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html
1.常用函数
5.流程控制函数
参考:https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html
CASE函数
1 2 3 4 5 6 7 | # 条件判断语句 SELECT NAME ,sex,age '原来年龄' CASE WHEN age IS NULL THEN 100 ELSE age END AS '年龄' FROM tb_emp; |
IF()函数
1 2 3 4 5 6 7 | # IF(expr1,expr2,expr3),如果expr1是 True ,返回expr2,否则返回expr3 mysql> SELECT IF(1>2,2,3); -> 3 mysql> SELECT IF(1<2, 'yes' , 'no' ); -> 'yes' mysql> SELECT IF(STRCMP( 'test' , 'test1' ), 'no' , 'yes' ); -> 'no' |
IFNULL()函数
1 2 3 4 5 6 7 8 9 | # IFNULL(expr1,expr2),如果字expr1不为 NULL ,则返回expr1,如果为 NULL ,则返回expr2 mysql> SELECT IFNULL(1,0); -> 1 mysql> SELECT IFNULL( NULL ,10); -> 10 mysql> SELECT IFNULL(1/0,10); -> 10 mysql> SELECT IFNULL(1/0, 'yes' ); -> 'yes' |
NULLIF()函数
1 2 3 4 5 | # NULLIF (expr1,expr2),如果expr1=expr2,则返回 NULL ,否则返回expr1 mysql> SELECT NULLIF (1,1); -> NULL mysql> SELECT NULLIF (1,2); -> 1 |
6.数值函数和操作符
参考:https://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
使用CEIL(x)函数/CEILING(x)函数返回不小于x的最小整数值
1 2 3 4 | mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1 |
使用FLOOR(x)函数返回不大于x的最大整数值
1 2 | mysql> SELECT FLOOR(1.23), FLOOR(-1.23); -> 1, -2 |
使用ROUND()函数保留N位小数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1 mysql> SELECT ROUND(23.298, -1); -> 20 mysql> SELECT ROUND(.12345678901234567890123456789012345, 35); -> 0.123456789012345678901234567890 |
使用RAND()函数生成随机数
1 2 3 4 5 6 7 8 | mysql> select RAND() from user limit 3; + ---------------------+ | RAND() | + ---------------------+ | 0.1310934062405428 | | 0.8610111650647699 | | 0.9117756373358663 | + ---------------------+ |
7.日期和时间函数
参考:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 返回当前 SELECT NOW(); # 查询时间是1981年 SELECT * FROM tb_emp WHERE YEAR (diredate) = 1981 AND MONTH (diredate) = 1982; #插入时间 INSERT INTO tb_emp( NAME ,sex,age,address,email,dept_id,diredate) VALUES ( 'ZHOU' , '男' ,33, '香港' , 'ZHOU@163.com' ,2, '1988-09-09' ); INSERT INTO tb_emp( NAME ,sex,age,address,email,dept_id,diredate) VALUES ( 'CAI' , '女' ,30, '香港' , 'CAI@163.com' ,2,NOW()); |
8.字符串函数和操作符
参考:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # concat 连接字符串 SELECT CONCAT( NAME ,sex) FROM tb_emp; # UPPER 转换大写/ LOWER 转换小写 SELECT UPPER ( NAME ) FROM tb_emp WHERE dept_id=1; SELECT LOWER ( NAME ) FROM tb_emp WHERE dept_id=1; # 返回字符串长度 SELECT LENGTH( NAME ) FROM tb_emp WHERE dept_id=1; # 返回部分字符 SELECT SUBSTR( NAME ,2,2) FROM tb_emp WHERE dept_id=1; # 比较字符串,按顺序比较,相等返回0,如果第一个的字符小于第二个,返回-1,否则返回1 mysql> SELECT STRCMP( 'text' , 'text2' ); + -------------------------+ | STRCMP( 'text' , 'text2' ) | + -------------------------+ | -1 | + -------------------------+ mysql> SELECT STRCMP( 'text' , 'texu' ); + ------------------------+ | STRCMP( 'text' , 'texu' ) | + ------------------------+ | -1 | + ------------------------+ mysql> SELECT STRCMP( 'text' , 'texa' ); + ------------------------+ | STRCMP( 'text' , 'texa' ) | + ------------------------+ | 1 | + ------------------------+ mysql> SELECT STRCMP( 'text' , 'texa1' ); + -------------------------+ | STRCMP( 'text' , 'texa1' ) | + -------------------------+ | 1 | + -------------------------+ |
19.聚合函数
参考:https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions-and-modifiers.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # 聚合函数,也叫组合函数,忽略空值 SELECT AVG (age) FROM tb_emp; SELECT SUM (age) FROM tb_emp; SELECT MAX (age) FROM tb_emp; SELECT MIN (age) FROM tb_emp; SELECT AVG (age) AS '平均年龄' , SUM (age) AS '总年龄' , MAX (age) AS '最高年龄' , MIN (age) AS '最低年龄' FROM tb_emp WHERE dept_id=1; # COUNT 不统计 null ,统计的是行数/记录数 SELECT COUNT (*) FROM tb_emp SELECT COUNT (email) FROM tb_emp # 不统计重复记录 SELECT COUNT ( DISTINCT diredate) FROM tb_emp # 分组统计 GROUP BY # 每个部门的平均年龄 SELECT dept_id, AVG (age) FROM tb_emp GROUP BY dept_id SELECT dept_id, AVG (age),address FROM tb_emp GROUP BY dept_id,address # 限定查询结果 HAVING 不能使用 where , where 子句中不可以使用函数 SELECT dept_id, AVG (age) FROM tb_emp GROUP BY dept_id HAVING AVG (age)>23 ORDER BY AVG (age) DESC ; # LIMIT 常用来分页 SELECT * FROM tb_emp LIMIT 5; #查询前5个记录 SELECT * FROM tb_emp LIMIT 5,10; #查询前6-10个记录 # group_concat,先聚合,再返回concat后的字符串 select username, group_concat(email), count (1) as cnt from user group by username having cnt > 1; # 输出 + --------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+-----+ | username | group_concat(email) | cnt | + --------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+-----+ | jshellshear0 | jshellshear0@prlog.org,jshellshear0@taobao.com | 2 | | test | ,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test,test@test | 16 | + --------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+-----+ |
本文只发表于博客园和tonglin0325的博客,作者:tonglin0325,转载请注明原文链接:https://www.cnblogs.com/tonglin0325/p/4660221.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App