MySQL_DQL_函数

函数#

  • 常见函数
Copy
/* 函数:类似于java中的方法 为了解决某个问题,将编写一系列的命令集合封装在一起,对外仅暴露方法名,供外部调用 1、自定义函数 2、调用函数:需要知道函数名以及函数功能 常见函数: 字符函数: concat:拼接字符 substr:截取子串 length:获取字节长度 char_length:获取字符长度 upper:字符转换为大写 lower:字符转换为小写 trim:去除前后指定字符 left:从左开始截取子串 right:从右开始截取子串 lpad:左填充 rpad:右填充 instr:获取字符串第一次出现的索引 strcmp:比较两个字符串大小 数字函数; abs:获取绝对值 ceil:向上取整 floor:向下取整 round:四舍五入 truncate:截断 mod:取余 日期函数: now:当前日期和时间 curdate:当前日期 curtim:当前时间 datediff:时间差 date_format:指定日期时间格式 str_to_date:按指定格式解析为日期时间类型 流程控制函数: if:如果 case:类似java的switch */ #一、字符函数 1、CONCAT 拼接字符 SELECT CONCAT(last_name,'我是拼接进来的',first_name) FROM employees; 2、LENGTH 获取字节长度 SELECT LENGTH('abcd中国');-- 10 3CHAR_LENGTH 获取字符个数 SELECT CHAR_LENGTH('abcd中国');-- 6 4、SUBSTRING 截取子串 /* 注意:起始索引从1开始!!! substr(str,起始索引,截取的字符长度) substr(str,起始索引) */ SELECT SUBSTR('如果我是dj你还爱我吗',9,1);-- 爱 5、INSTR获取字符第一次出现的索引 SELECT INSTR('如果我是dj你还爱我吗','爱');-- 9 6、TRIM去前后指定的字符,默认是去空格 SELECT TRIM(' 如果我是dj 你还爱我吗 '); SELECT TRIM('x' FROM 'xx如果x我是dj你还爱我吗xx');-- 如果x我是dj你还爱我吗 7、LPAD/RPAD 左填充/右填充(按指定的长度显示字符) SELECT LPAD('独孤九剑',10,'a');-- aaaaaa独孤九剑 SELECT RPAD('独孤九剑',1,'a');-- 独 8 、 UPPER/ LOWER转换大小写 -- 案例:查询员工表的姓名,要求格式:姓首字符大写,其他字符小写,名所有字符大写,且姓和名之间用_分割,最后起别名“OUTPUT” SELECT CONCAT( UPPER(SUBSTR(first_name, 1, 1)), LOWER(SUBSTR(first_name, 2)),'_',UPPER(last_name) ) AS "OUTPUT" FROM employees ; 9、STRCMP 比较两个字符大小(前面的比后面的大返回1,小返回-1) SELECT STRCMP('aa','bb');-- -1 10LEFT/RIGHT 截取子串,从左/右开始 SELECT LEFT('鸠摩智',1); SELECT RIGHT('鸠摩智',1); #二、数学函数 1、ABS 绝对值 SELECT ABS(-34.6); 2、CEIL 向上取整 返回>=该参数的最小整数 SELECT CEIL(-1.09); -- 1 3、FLOOR 向下取整,返回<=该参数的最大整数 SELECT FLOOR(-1.09); -- -2 4、ROUND 四舍五入 SELECT ROUND(1.8712345,1);-- 1.9 5TRUNCATE 截断 SELECT TRUNCATE(1.8712345,1);-- 1.8 6、MOD 取余 SELECT MOD(-10,3); 取余公式:a%b = a-(INT)a/b*b 小技巧:被取余数是正数/负数结果也是 #三、日期函数 1、NOW -- 当前日期和时间 SELECT NOW(); 2、CURDATE -- 当前日期 SELECT CURDATE(); 3、CURTIME -- 当前时间 SELECT CURTIME(); 4、DATEDIFF -- 计算时间差(日期错误时结果为null) SELECT DATEDIFF('2020-03-30','2020-02-29');-- 30 5、DATE_FORMAT -- 指定日期时间格式 SELECT DATE_FORMAT('1998-01-02 15-20-10','%Y年%m月%d日 %H时%i分%s秒');-- 1998年01月02日 15时20分10秒 6、STR_TO_DATE -- 按指定格式解析字符串为日期时间类型 SELECT STR_TO_DATE('3/15 1998 10:20:20','%m/%d %Y %H:%i:%s');-- 1998-03-15 10:20:20 #四、流程控制函数 1、IF函数 -- 类似三元运算符 SELECT IF(100>9,'好','坏'); -- 案例:需求:如果有奖金,则显示最终奖金,如果没有,则显示0 SELECT IF(commission_pct IS NULL,0,12*salary*commission_pct) FROM employees; 2CASE函数 -- 情况1:类似于switch语句,可以实现等值判断 CASE 表达式 WHEN1 THEN 结果1 WHEN2 THEN 结果2 ... ELSE 结果n END -- 情况2:类似于多重IF语句,实现区间判断 CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 结果n END
  • 分组函数
Copy
/* 说明:分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数 分组函数清单: sum(字段名):求和 avg(字段名):求平均值 max(字段名):求最大值 min(字段名):求最小值、 count(字段名):计算非空字段值的个数 */ #案例1 :查询员工信息表中,所有员工的工资和、工资平均值、最低工资、最高工资、有工资的个数 SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary) FROM employees; #案例2:添加筛选条件 -- ①查询emp表中记录数: SELECT COUNT(employee_id) FROM employees; -- ②查询emp表中有佣金的人数: SELECT COUNT(salary) FROM employees; -- ③查询emp表中月薪大于2500的人数: SELECT COUNT(salary) FROM employees WHERE salary>2500; #④查询有领导的人数: SELECT COUNT(manager_id) FROM employees; #count的补充介绍★ -- 1、统计结果集的行数,推荐使用count(*) -- -- 方式一:检测每一行的每一列,只要有不为null的值,则返回该行 SELECT COUNT(*) FROM employees; SELECT COUNT(*) FROM employees WHERE department_id = 30; -- -- 方式二:在每一不为空的行前面加一列,并指定值用来判断非空(效率低) SELECT COUNT(1) FROM employees; SELECT COUNT(1) FROM employees WHERE department_id = 30; -- 2、搭配distinct实现去重的统计 -- -- 需求:查询有员工的部门个数 SELECT COUNT(DISTINCT department_id) FROM employees;
posted @   "无问西东"  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
网络创业项目 123how出海导航
点击右上角即可分享
微信分享提示
CONTENTS