mysql学习笔记-常用函数

一、字符串函数

常用函数:
concats(str1,str2,……strn)  字符串拼接
LOWER(str)  字符串转小写
UPPER(str)  字符串转大写
LPAD(str,len,padstr)  左填充,用字符串padstr对str的左边填充,达到n个字符串长度
RPAD(str,len,padstr)  右填充,用字符串padstr对str的右边填充,达到n个字符串长度
TRIM(str) 去掉字符串头部和尾部的空格
SUBSTRING(str,start,len) 返回str从start开始的len个长度的字符串  类似excel mid()

-- concat
select concat('helo','-','北京')

-- lower
select lower('BEIJING')

-- upper()
select upper('beijing')

-- lpad
select lpad('wuhan',10,'hb')
-- result  hbhbhwuhan

-- rpan
select rpad('wuhan',10,'wc')
-- result  wuhanwcwcw

-- trim
select trim('   wo ai zhong guo   ')
-- result:wo ai zhong guo

-- substring
select substring('武汉国立大学', 1, 2)

练习1 对所有员工编号设置为8位,不足8位在前面补0,继续使用DQL学习的emp表格练习。
select * from emp;
update emp set workno=lpad(workno,8,'0');


二、数值函数
常用函数:
CEIL(X)     向上取整
FLOOR(X)    向下取整
MOD(N,M)    返回X/Y的模
RAND()      返回0-1内的随机数
ROUND(X,D)    求参数x的四舍五入,保留D位小数

-- ceil
select ceil(2.28);
# result 3

-- floor
select floor(2.28);
# result 2

-- mod
select mod(10,3);
# result 1

-- rand
select rand();
# result 0.8357684918081094

-- round
select round(3.1415926,2);
# result 3.14

-- 练习1、返回一个6位数随即验证码

select lpad(round(rand()*1000000),6,'0');
# result 098583

三、日期函数
常用函数:
CURDATE()   返回当前日期
CURTIME()        返回当前时间
NOW()                返回当前日期加时间
YEAR(date)  获取指定date的年份
MONTH(date)    获取指定date的月份
DAY(date)   获取指定date的日期
DATE_ADD(date,INTERVAL expr unit)    返回一个指定日期/时间值的基础上,加上一个时间间隔expr后的时间值
DATEDIFF(expr1,expr2)                                 返回起始时间date1和结束时间date2质检的天数

-- CURDATE
SELECT CURDATE();
# 2022-07-12

-- CURTIME
SELECT CURTIME();
# 12:39:15

-- NOW
SELECT NOW();
# 2022-07-12 12:38:42

-- YEAR, MONTH, DAY
SELECT YEAR(NOW());
# 2022

SELECT MONTH(NOW());
# 7

SELECT DAY(NOW());
# 12

-- DATE_ADD 
# 往后推迟70天
SELECT DATE_ADD(NOW(),INTERVAL 70 DAY);

# 往后推迟70月
SELECT DATE_ADD(NOW(),INTERVAL 70 MONTH);

# 往后退出70年
SELECT DATE_ADD(NOW(),INTERVAL 70 YEAR);
#result 2092-07-12 12:43:16

-- DATEDIFF,(date1-date2)

SELECT DATEDIFF('2021-12-01','2022-12-01');
# result -365
SELECT DATEDIFF('2022-12-01','2021-12-01');
# result 365


练习1、查询所有员工入职天数,并根据入职天数排序

select name,datediff(curdate(),entydate) as 'entydays' from emp order by entydays desc ;


四、流程函数
常用函数:
IF(VALUE,T,F)          如果value为true,返回T,否则返回F
IFNULL(expr1,expr2)    如果expr1不为空,返回expr1,否则返回expr2
CASE WHEN [val1] THEN [RES1] ……ELSE[default] END   
如果val1为true,返回res1,否则返回defauit默认值

CASE [expr] WHEN [val1] THEN [res1] …… ELSE [default] END
如果expr值等于val1,返回res1,否则返回defauit默认值  

-- if
select if (true,'答对了','不知道');
# result 答对了

select if(false,'答错了','加油');
# result 加油

-- ifnull
select ifnull("",'空的');
select ifnull("da",'空的');
select ifnull(null,'空的');

-- case when then else end
-- 查询员工姓名和员工地址,如果员工在北京上海,展示一线城市,其他二线城市
select 
        name,
        (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '是否一线'
from emp;


练习1、统计公司员工年龄,如果大于30岁中年,大于20岁青年,否则 少年(可多字段判断)

select 
        name,
        (case  when age>30 then '中年' when age>20 then '青年' else '少年' end) as '青少年统计',
        (case  when age>30 then 'zhognnian' when age>20 then 'qn' else 'sn' end) as 'enght'
from emp;

 

posted @ 2022-07-12 14:15  gala  阅读(37)  评论(0编辑  收藏  举报