目录
一,字符串函数
1,长度函数 length(字符串)
select length('我是一个字符串'); -- gbk编码 一个中文占据2个字符 utf8编码格式 一个中文字符占据3个字符
select length('abcde'); --- 5个字符
---仅这个函数 返回的是字符编码集合 内存里面的字符长度
2,替换函数 replace(字段列,旧字符串,新字符串)
---应用场景 替换某一列中 包含某某字符串 修改成某某字符
--替换 student 表名 s_id 开始的字符 为B
select REPLACE(s_id,'A','B') from student;
3,拼接函数 concat(字符串1,字符串2,字符串3,……)
--字符串连接函数 concat(str1,str2,……) 参数1 字符串 参数2 字符串 可以有多个参数 返回的结果是拼接这些字符串;
select concat('python-','mysql');
4,大小写函数 lower upper
--字符串的转换函数 upper(字符串) lower(字符串)
select upper('hi'); --HI
select lower('HI'); --hi
--应用场景 数据整理 把英文的 或者带小写不规范的都整理成统一格式的
5,截取函数 substr
--字符串截取函数 substr(字符串,int开始的下标,int结束的下标) 最后一个参数是可选参数 如果不填写 就是从开始到后面全部
-- mysql中字符串 是从1开始的
select substr('himysql',1,2); --hi
select substr('himysql',3);--mysql
select substr('himysql',3,7); --mysql
---应用场景 数据清洗
--这个表 前面都有红楼梦 我们可以清晰掉 只要后面的字符
select lpad(name, 6, '红楼梦') from student where name like '___';
6,填充函数 lpad rpad
--填充字符串函数 lpad(字符串,int填充的长度,str填充的字符串类型)
select lpad('我是字符串',8,'*'); --**我是字符串
select rpad('我是字符串',9,'*'); --我是字符串***
7,判断字符串是否存在 instr
--判断字符串是否存在的函数 instr(原始字符串,要查找的字符串)
select instr('北京大学','大') ; --1 true
select instr('北京大学','小') ; --0 flase
---应用场景 等同于 like 模糊查询
select * from 表名 where 字段 like '%或者_'
8,去除空格函数 trim ltrim rtrim
--去除空格函数 trime(字符串) ltrime(字符串) rtime(字符串)
select trim(' mysql '); --mysql
select ltrim(' mysql '); --mysql 去除左边空格
select rtrim(' mysql '); -- mysql 去除右边空格
---应用场景 数据整理
二,数值函数
1,四舍五入函数 round(浮点数值,小数点后面保留几位) 参数都是int类型
--四舍五入函数 round(数值,小数点后保留的长度) 截取长度后面一个数值然后进行四舍五入
select round(3.11,1); --3.1
select round(3.19,1); -- 3.2
select round(3.112,2);--3.11
select round(3.119,2); --3.12
2,截取函数(非四舍五入) truncate(浮点数值,小数点后面保留几位) 参数都是int类型
--不四舍五入 纯截断函数 truncate(数值,小数点后保留的长度) 不四舍五入
select TRUNCATE(3.11,1);--3.1
select truncate(3.19,1);--3.1
3,取整函数 往上取整,天花板 ceil(浮点数值)
--天花板函数 ceil(数值) 小数点后面都不要 保留整数 向上取整
select ceil(3.11) ;--3
4,取整函数 往下取整,地板 floor(浮点数值)
--地板函数 floor(数值) 向下取整 小数点后面都不要 保留整数
select floor(3.99);--3
5,指数运算函数 pow(x,x的N次方)
--指数函数 幂运算 pow(x,x的N次方)
select pow(2,3);--8
select pow(7,3); --343
select pow(7,2); --14
6,余数运算函数 mod(数值,取余数)
--余数函数 mod(被除数数值,除数);
select mod(5001,5000); --1
select mod(3,2);--1
select mod(4,2);--0
三,时间函数
--1,返回当前时间和日期 now 可以用作插入数据的时候
select now();
--2,返回当前日期
select curdate();
--3,返回当前时间
select curtime();
--4,返回一年的第几周 weekofyear(参数是包含时间的字符串)
select weekofyear('2026-05-02');
select weekofyear(now());
select weekofyear(curdate());
--5,返回一年中的季度 quarter(参数是包含时间的字符串)
select quarter(now());
--6,字符串转事件类型 str_to_date(字符串,时间格式);
select str_to_date('20200506','%Y%m%d'); --字符串和转换时间的格式必须要对应
select str_to_date('2024-05-06','%Y-%m-%d');
--7,格式化时间字符串 date_format(时间字符串,想要的时间格式);
select date_format('2025/05/05','%Y年');-- 2025年
select date_format(now(),'%m月');-- 06月
select date_format(now(),'%d日');-- 21日
select date_format(now(),'%H小时');-- 15小时
select date_format(now(),'%i分钟');-- 50分钟
select date_format(now(),'%s秒');-- 49秒
/*
%Y - 四位数的年份(例如 2023)
%m - 月份(01 到 12)
%d - 日(01 到 31)
%H - 小时(00 到 23,24小时制)
%h 或 %I - 小时(01 到 12,12小时制)
%i - 分钟(00 到 59)
%s - 秒(00 到 59)
*/
select DATE_FORMAT(now(),'%Y这是年*%m这是月*%d这是天,%h这是小时*%i这是分钟*%s这是秒');
--24这是年 * June这是月 * 21这是天, 03这是小时 * 53这是分钟 * 31这是秒
--8,date_add 时间增加函数 date_add(参数1带时间的字符串,interval 1 [Year | Month |Day |Hour| Minute| Second]);
select DATE_ADD(now(),INTERVAL -1 day);
select DATE_ADD(now(),INTERVAL 1 day);
--9,计算本月的最后一天 last_add(参数是带月份的字符串)
select last_day(now());
select last_day('2025-05-06');
--10 计算 时间差函数 datediff(结束时间字符串,开始时间字符串)
select datediff(now(),'1991-09-07');--11976
--11 计算时间差 可以细化为 年月日时分秒函数
--timestampdiff([Year | Month |Day |Hour| Minute| Second],开始时间,结束时间)
select TIMESTAMPDIFF(YEAR,'1991/09/17',NOW());
-- 12 把时间日期转成时间戳 unix_timestamp(date)
select unix_timestamp(now());
select unix_timestamp('2022-06-07');
--13 把时间戳转成 日期
select from_unixtime(0); --1970-01-01 08:00:00 时区
select FROM_UNIXTIME(1721256456);
四,判断函数
-- ①if(expr,v1,v2)函数 : 判断数据给出返回值
select if(1>0,'为true则返回我','为false则返回我');
select if(1<0,'为true则返回我','为false则返回我');
-- ②ifnull()函数 : 判断空给出返回值
--ifnull(字符串,如果是null则返回这个值)
--ifnull(字符串,如果不是null返回原来的值)
select ifnull(null,'我是填充的值');
select ifnull(1,'我是填充的值');
--nullif(expr1,expr2) : 相同返回null 不同保留表达式1的原值.
select nullif(1,1); --如果值相等则返回null
select nullif(1,0); -- 如果值不相等 则返回第一个值
五,分支流程
-- ③case…when函数用法 : 多条件判断给出返回值.
--需求1 查询 student表里面 语文分数 小于60给不及格 大于60小于80 给良好 大于80给优秀
select name,chinese,
case
when chinese<60 and chinese>0 then '不及格'
when chinese>=60 and chinese<=80 then '良好'
when chinese>=80 and chinese<100 then '良好'
else '满分选手'
end as '段位'
from student;
--需求2 查询 student表里面 语文分数 小于60给不及格 大于60小于80 给良好 大于80给优秀
select name,s_id,
case s_id
when 'A001' then 'b001'
when 'A002' then 'b002'
when 'A003' then 'b003'
when 'A004' then 'b004'
else '待定'
END as '级别'
from student;