函数
在mysql中除了聚合函数 我们还经常会使用到一些其他的函数 下面就一起来看一下吧!
字符串函数
函数 | 功能 |
---|
concat(S1,S2,.....Sn) | 将字符串S1,S2,...Sn 拼接成一个字符串 |
lower (str) | 将字符串str 全部转换为小写 |
upper(str) | 将字符串str 全部转换为大写 |
lpad(str,n,pad) | 左填充 用字符串pad 对字符串str 的左边进行填充 使得总长度达到n |
rpad(str,n,pad) | 右填充 用字符串pad 对字符串str 的右边进行填充 使得总长度达到n |
trim(str) | 去掉字符串str 的头尾空格 |
substring(str,start,length) | 截取字符串 从str 中从长度start开始 截取长度length的字符串 |
-- 字符串函数
-- 拼接 hello与mysql 表示将多个字符串进行填充
select concat('hello','world!');
-- Hello 全部转为小写
select lower('Hello');
-- Hello 全部转为大写
select upper('Hello');
-- 左填充 第一个参数表示要操作的字符 第二个参数表示将源字符串共填充到几位 最后一个参数表示用什么填充
select lpad('01',6,'-');
-- 右填充 参数同上
select rpad('01',6,'*');
-- 去除 ' hello '头尾部空格
select trim(' hello ');
-- 截取字符串 第一个参数表示要操作的字符串 第二个参数表示从第几个位置上开始截取 这里指的是具体位置 第三个参数表示截取的长度
select substring('Hello,world!',7,5);
数值函数
函数 | 功能 |
---|
ceil (x) | 向上取整 只要后面有大于0 的小数向上取一位 |
floor (x) | 向下取整 舍弃小数 |
mod (x,y) | 返回 x/y 的模 |
rand () | 返回0~1 内的随机数 rand*n 表示返回 0~n 的随机数 |
round (x,y) | 求x 四舍五入后的值 y 表示保留几位小数 默认为0 |
-- 数值型函数
-- 对 1.1向上取整 不管四舍五入的规则 只要后面有大于0的小数 直接向上取一位
select ceil(1.1);
-- 对 1.9向下取整 不管四舍五入的规则 直接舍弃小数
select floor(1.9);
-- 对 4/3 取模
select mod(4,3);
-- 获取随机数 rand函数本身表示获取 0,1之间但是不包含0,1的随机数 *n 表示获取 0-100的随机数
select rand()*100;
-- 四舍五入 第一个参数表示要操作的数 第二个参数表示 要保留的位数 不写默认保留0位
select round(3.1415926,3);
日期函数
函数 | 功能 |
---|
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
now() | 返回当前日期+时间 |
year(date) | 返回指定date 的年份 |
month(date) | 返回指定date 的月份 |
day(date) | 返回指定date 的天 |
date_add(date,interval expr) | 返回一个日期/时间值加上一个时间间隔expr 后的 时间值 |
datediff(date1,date2) | 返回开始时间date1 和结束时间date2 的天数时间差 |
-- 日期函数
-- 获取当前日期
select curdate();
-- 获取当前时间
select curtime();
-- 获取当前日期+时间
select now();
-- 获取当前年月日
select year(now());
select month(now());
select day(now());
-- 增加指定时间间隔
select date_add(now(),interval 70 year);
-- 获取两个日期相差天数
select datediff('2021-10-01', '2021-12-01');
-- 查询所有员工入职天数 并按照入职天数倒叙排序
select name, datediff(curdate(),entrydate) '入职天数' from emp order by 入职天数 asc;
流程函数
函数 | 功能 |
---|
IF(value , t , f) | 如果value 为true 返回t 否则返回f |
IFNULL(value1 , value2) | 如果value1 为null返回value2 否则返回value1 |
CASE ’判断对象‘ WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END | 如果val1 为true 返回res1 , …否则返回default |
CASE ’判断对象‘[ expr ] WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END | 如果expr 的值等于val1 ,返回 res1 ,… 否则返回default 默认值 |
-- 流程函数
-- if(value,t ,f ) 如果value为true 返回true 否则返回false
select if(true,'t','f');
-- ifnull(value1,value2) 如果value1不为null返回vlaue1 否则返回value2
select ifnull('ok','no');
select ifnull('','no');
select ifnull(null,'no');
-- case ‘要判断的值’ when[val1] then[res1]... else[default] end
-- 如果 val(i) 值为true 返回 res(i) 否则返回 default 默认值
-- 查询员工表的姓名和工作地址(北京/上海----->一线城市 ,其他------>二线城市)
select name, (case workaddress when'北京' then '一线城市'when'上海' then'一线城市' else '二线城市'end) as '工作地址' from emp ;
-- case ‘要判断的值’ [expr]when [val1] then [res1] ... else[default] end
-- 如果 expr 的值等于 val 返回res ...否则返回默认值