表数据结构如下:
MySQL常用函数分类:
1、字符函数
1、CONCAT():拼接字符串
SELECT
CONCAT(b.id,‘--->‘,b.name,‘===‘,b.sex) AS ‘编号‘
FROM beauty b
WHERE b.id IN (1,3,5);
2、SUBSTR():截取子串
2.1、SUBSTR(str,pos):从pos的位置开始截取字符串str
注意:MySQL的索引是从1开始的
SELECT SUBSTR(‘人生没有如果,只有后果和结果‘,8) AS result; //从索引位置为8的地方开始截取字符串 人生没有如果,只有后果和结果
2.2、SUBSTR(str,pos,len):从pos的位置开始截取长度为len的字符
SELECT SUBSTR(‘人生没有如果,只有后果和结果‘,1,6) AS result; //从索引为1的位置开始,截取长度为6的字符串
3、UPPER()/LOWER():转换成大写/小写
SELECT UPPER(‘AbcdEFgHijKlMn‘) AS result; //将AbcdEFgHijKlMn全部大写
SELECT LOWER(‘AbcdEFgHijKlMn‘) AS result; //将AbcdEFgHijKlMn全部小写
4、REPLACE(str,str2,str3):将str中的str2全部替换为str3
SELECT REPLACE(‘大弦嘈嘈如急雨‘,‘弦‘,‘琵琶‘) AS result; //将 大弦嘈嘈如急雨中的弦全部替换为琵琶
5、TRIM(str):去除str前后的空格)
5.1、TRIM(str):去除str前后的空格
SELECT TRIM(‘ aaaa小毛毛变身aaaa ‘) AS result; // 去除字符串 aaaa小毛毛变身aaaa 前后的空格
5.2、TRIM(‘str2‘ FROM str):去除str中的str2
SELECT TRIM(‘a‘ FROM ‘aaaa小毛毛变身aaaa‘) AS result; // 去除指定字符串 aaaa小毛毛变身aaaa 中的字符 a
6、INSTR(str,substr):返回substr在str中第一次出现的位置,如果不存在返回为0
SELECT INSTR(‘人生没有如果,只有后果和结果‘,‘果‘); // 指定字符串中第一次出现字符 ‘果‘的索引 结果是:6
SELECT INSTR(‘人生没有如果,只有后果和结果‘,‘嘿嘿‘); // 如果字符串中不包含子串,则结果为0
7、LENGTH(str):返回str的字节长度
UFT-8中英文字符长度为1,汉字字符长度为3,JDK中英文字符长度为1,汉字字符长度为2
SELECT LENGTH(‘abcdef‘); //结果是6
SELECT LENGTH(‘小毛毛‘); //结果是9
2、数学函数
1、ROUND
1、ROUND(X):实际上就是ROUND(X,0)的简写
对1.38进行四舍五入,保留0位小数
SELECT ROUND(1.38);
结果是: 1
2、ROUND(X,D):对X进行四舍五入,保留小数点后D位.
对1.3855333进行四合五入,保留三位小数
SELECT ROUND(1.3855333,3);
结果是: 1.386
2、CEIL
CEIL(X):对X进行向上取整
SELECT CEIL(-3.38);
结果是: -3
SELECT CEIL(3.38);
结果是: 4
3、FLOOR
FLOOR(X):对X进行向下取整
SELECT FLOOR(3.38);
结果是: 3
SELECT FLOOR(-3.38);
结果是: -4
4、MOD
MOD(n,m):n对m取余
SELECT MOD(10,3);
结果是: 1
SELECT MOD(10,5);
结果是: 0
SELECT MOD(8,3);
结果是: 2
5、TRUNCATE
TRUNCATE(X,D):截取X小数点后D位
SELECT TRUNCATE(5,2);
结果是: 5
SELECT TRUNCATE(3.6548952,3);
结果是: 3.654
SELECT TRUNCATE(3.98465886,5);
结果是: 3.98465
3、日期函数
1、NOW():返回当前系统日期+时间
NOW():返回当前系统日期+时间
SELECT NOW();
结果是: 2020-06-22 19:58:12
2、CURDATE():返回当前系统日期
CURDATE():返回当前系统日期
SELECT CURDATE();
结果是: 2020-06-22
3、CURTIME():返回当前系统时间
CURTIME():返回当前系统时间
SELECT CURTIME();
结果是: 19:58:12
4、STR-TO-DATE():将字符解析为日期
STR-TO-DATE():将字符解析为日期
MySQL中日期和字符相互转换方法
STR-TO-DATE(date,’%Y-%m-%d’)
%Y:代表4位的年份
%y:代表2位的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00…31)
%e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
5、DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据.
DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据.
DATE_FORMAT(NOW(),‘%y年%m月%d日‘)
4、流程控制函数
1、IF(expr1,expr2,expr3)
IF(expr1,expr2,expr3):作用类似于三元运算符,如果expr1成立,结果为expr2,否则为expr3
1、SELECT IF(10 > 5,‘大于‘,‘小于‘);
结果是: 大于
2、SELECT
last_name,
commission_pct,
IF(commission_pct IS NULL,‘没奖金,呵呵‘,‘有奖金,哈哈‘)
FROM
employees;
2、CASE
案例1:查询员工的工资,部门编号
要求:
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资
SELECT
salary AS 原始工资,
department_id,
CASE
WHEN department_id = 30 THEN salary * 1.1
WHEN department_id =40 THEN salary * 1.2
WHEN department_id = 50 THEN salary * 1.3
ELSE salary
END AS 新工资
FROM employees;
案例2:查询员工的工资的情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别
SELECT last_name,salary,
CASE
WHEN salary > 20000 THEN ‘A级别‘
WHEN salary > 15000 THEN ‘B级别‘
WHEN salary > 10000 THEN ‘C级别‘
ELSE ‘D级别‘
END
FROM employees;
5、其它函数
SELECT VERSION():查看当前数据管理系统版本.
SELECT DATABASE():查看当前正在使用的数据库.
SELECT USER():查看当前用户.