目录
1:日期函数
2:字符函数
3:数值函数
4:流程函数
1:日期函数
select 函数(参数)
函数 | 功能 | 举例 |
curdate() | 返回当前日期 | 2023-05-17 |
curtime() | 返回当前时间 | 14:44:33 |
now() | 返回当前日期和时间 | 2023-05-17 14:44:33 |
year(date) | 获取指定date的年份 | |
month(date) | 获取指定date的月份 | |
day(date) | 获取指定date的日期 | |
date_add(date,interval expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间值 | |
datediff(date1,date2) | 返回起始时间date1和结束时间date2之间的天数 | 计算时:date1-date2 如果date2>date1会出现负值 |
--now()
select now();
--year,month,day
select year (now());
select month (now());
select day(now());
--date_add
select date_add(now(),interval 70 year);
--datediff
select datediff (now(),"2021-04-05");
--curdate
select curdate();
--curtime
select curtime();
原数据:
--案例:查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(now(),time_a) as "入职时间" from user_name order by "入职时间" desc;
2:字符函数
select 函数(参数) | ||
函数 | 功能 | 补充 |
concat(s1,s1....) | 字符串拼接,将S1,S2,.Sn拼接成一个字符串 | |
lower(str) | 将字符串str全部转为小写 | |
upper(str) | 将字符串str全部转为大写 | |
lpad(str,n,pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 | n:字符串总共的长度,pad:用什么填充 |
rpad(str,n,pad) | 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 | n:字符串总共的长度,pad:用什么填充 |
trim(str) | 去掉字符串头部和尾部的空格 | |
substring(str,start,len) | 返回从字符串str从start位置起的len个长度的字符串 | 1开始数 |
--concat
select concat ("hello","mysql");
--lower
select lower("HELLO");
--upper
select upper("hello");
-lpad
select lpad("01",5,"0");
-rpad
select rpad("01",5,"0");
-trim
select trim(" hello mysql ");
--substring
select substring("hello mysql",1,5);
原数据
--1,由于业务需求变更,企业员工的工号job,统一%15位数,目前不5位数的全部在前面补0。比如:1号员工的工号应该%000000000000001
update user_name set job = lpad(job,15,"0");
3:数值函数
函数 | 功能 |
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
mod(x,y) | 返回x/y的模 mod(4,5)=4,相当于python的取余 |
rand() | 返回0~1内的随机数 |
round(x,y) | 求参数x的四舍五入的值,保留y位小数 |
--ceil
select ceil(1.1);
--floor
select floor(1.9);
-mod
select mod(4,5);
--rand
select rand();
--round
select round(2.344,2);
--案例: 通过数据库的函数,生成一个六位数的随机验证码。
select ceil(rand()*1000000);--或者
select rpad(round(rand()*1000000,0),6,0);
4:流程函数
函数 | 功能 | 补充 |
if(value,t,f) | 如果value为true,则返回t,否则返回f | values为"""," "都为flase |
ifnull(value1,value2) | 如果value1不为空,返回value1,否则返回value2 | ""也不算空,只有当valuse为null时返回value2 |
case when [val1] then [res1] ....... else [default] end | 如果val1为true,返回res1,... 否则返回default默认值 | when ..then...可以写多个 |
case [expr] when [val1] then [res1] else [default] end | 如果expr的值等于val1,返回res1,... 否则返回default默认值 |
select if ("1","yes","no");
select ifnull(flase,"hello");
-- case when then else end
select
name,
(case gender when "男" then "努力" when "女" then "加油" else "不是人" end ) as "类型"
from user_name;
select
name,
(case when age ="18" then "成年" when age ="20" then "刚好" else "没有拉" end) as "年龄"
from user_name;
在 SQL 的 CASE 表达式中,有两种常见的语法形式,分别是:
1. case when [条件1] then [结果1] when [条件2] then [结果2] ... else [默认结果] end
这种形式是根据条件进行判断,并返回对应的结果。每个条件可以是一个逻辑表达式,当条件满足时,返回对应的结果。如果没有任何条件满足,则返回默认结果。2. case [表达式] when [值1] then [结果1] when [值2] then [结果2] ... else [默认结果] end
这种形式是根据表达式的值进行判断,并返回对应的结果。表达式可以是一个字段名、计算表达式或任何其他可求值的表达式。当表达式的值与某个条件值匹配时,返回对应的结果。如果没有匹配的条件值,则返回默认结果。总结一下两种形式的区别:
- 第一种形式基于条件进行判断,条件可以是任意逻辑表达式。
- 第二种形式基于表达式的值进行判断,表达式可以是字段名、计算表达式等。选择使用哪种形式取决于具体的需求和数据情况。根据情况选择更适合的形式可以使 SQL 查询更加清晰和易于理解。