#进阶4:常见函数
/*
概念:类似于java中的方法,将一组逻辑语句封装在方法中,对外暴露方法名
好处:1、隐藏了实现细节。2、提高代码的重用性
调用:select 函数名(实参列表) from 表
特点: ①函数名
②函数功能
分类: ①单行函数
如:concat、ifnull、length等
传一个值,返回一个值
②分组函数(统计函数、聚合函数、组函数)
功能:做统计使用的
传一组值,返回一个值
*/
单行函数
一、字符函数
#length 获取参数的字节个数
SELECT LENGTH('join'); #4
SELECT LENGTH('张三丰hahaha'); #15,一个汉字占三个字节,一个字母一个字节
SHOW VARIABLES LIKE '%char%'; #显示当前系统支持的字符集
#concat 拼接字符串
SELECT CONCAT(last_name,'_',first_name)
FROM employees;
#upper/lower
SELECT UPPER('join'); #将参数变为大写
SELECT LOWER('JOIN'); #将参数变为小写
#案例1:将姓变大写,将名变小写
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名
FROM employees;
#substr/substring #截取字符
从所引出截取剩余全部字符
SELECT SUBSTR('李莫愁爱上了路展元',7) AS output; -- 索引从1开始
截取从指定索引处开始,指定长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) output;
#案例:姓名中首字母大写,其他字符小写,用下划线拼接显示出来
USE myemployees;
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)),LOWER(first_name))
FROM employees;
#instr(str1,str2) 返回str1中最早出现str2的位置 ,如果找不到返回0
SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷六侠') AS output;
#trim 去掉字符串前后的指定字符,如不指定默认去除空格,中间的特殊字符无法去除
SELECT TRIM(' 李乐 0612') AS output;
SELECT TRIM('l' FROM 'llllllllllllllllll李lll乐lllll') AS output;
#lpad(str1,i,str2) 左填充 用指定的str2左填充str1到指定长度i。
#如果填充的长度i小于str1则从左向右截取str1中的i个字符
SELECT LPAD('殷素素',10,'*') AS output;
SELECT LPAD('殷素素',1,'*') AS output;
#rpad(str1,i,str2) 右填充 用指定的str2右填充str1到指定长度i。
#如果填充的长度i小于str1则从右向左截取str1中的i个字符
SELECT RPAD('殷素素',10,'*') AS output;
SELECT RPAD('殷素素',1,'*') AS output;
#replace(str1,str2,str3) 替换 str3替换str1中的str2,如果存在多出str2,则全部替换
SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏') output;
二、数学函数
#round 四舍五入
SELECT ROUND(3.14);
SELECT ROUND(3.54);
SELECT ROUND(-3.14);
SELECT ROUND(-3.54);
#round(x,i) 四舍五入,x保留i位小数
SELECT ROUND(3.14,1);
#ceil 向上取整,返回大于等于该参数的最小整数
SELECT CEIL(-3.14);
#floor 向下取整,返回小于等于该参数的最大整数
SELECT FLOOR(-3.14);
#truncate(num1,i) 截断函数,保留指定的小数位数
#对num1截断,保留i位小数
SELECT TRUNCATE(3.14,1);
#mod(a,b) 取模/取余 被除数为正结果则为正,被除数为负,结果则为负
#结果为:a-a/b*b a/b如果ab均为整数的话,则结果也为整数
SELECT MOD(10,3); #10%3==1
SELECT MOD(10,-3); #10%-3==1
SELECT MOD(-10,3); #-10%3==-1
SELECT MOD(-10,-3); #-10%-3==-1
三、日期函数
#1、now 用于返回当前系统日期+时间
SELECT NOW();
#curdate 返回当前系统的日期
SELECT CURDATE();
#curtime 返回当前系统的时间
SELECT CURTIME();#获取指定的部分:年、月、日、小时、分钟、秒
SELECT YEAR(NOW()); #显示年份
SELECT YEAR('1997-06-12'); #显示指定字符串中的年份
USE myemployees;
SELECT YEAR(hiredate)
FROM employees;
SELECT MONTH(NOW()); #显示当前月份
SELECT MONTHNAME(NOW()); #显示当前月份的英文名称
SELECT SECOND(NOW()); #显示当前时间的秒数
#str_to_date(str1,str2) #将str1按照str2的格式进行简析日期
SELECT STR_TO_DATE('1997-06-12','%Y-%d-%m');
常见格式转换符
#date_formate 将日期转换为指定格式的字符
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');
#案例:查询有奖金的员工和入职日期(XX年/xx月/xx日)
SELECT last_name,DATE_FORMAT(hiredate,'%Y年/%m月/%d日'),commission_pct
FROM employees
where not(commission_pct is null); #以下方法均可使用
WHERE commission_pct IS NOT NULL;
四、其他函数
SELECT VERSION(); #查看数据库的版本
SELECT DATABASE(); #查看当前数据库名称
SELECT USER(); #查看当前用户
五、流程控制函数#1、if函数:实现if..else功能
#if(expr1,expr2,expr3) == expr1?expr2:expr3
SELECT IF(10>5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,'有奖金','没有奖金') AS 备注
FROM employees
ORDER BY LENGTH(last_name) DESC;
来源:CSDN
作者:小顽固哥
链接:https://blog.csdn.net/qq_41825534/article/details/104680818