MySQL内置函数
数学函数:
示例:
select now() -- 查询当前时间
select truncate(1011.2345678,2) -- 保留小数点后两位
select ceil(1000.1) -- 返回不小于1000的最大整数
select floor(1000.1) -- 返回不大于1000的最大整数
select rand() -- 返回0-1之间随机数
select truncate(rand(),2) -- 返回0-1之间随机数保留两位小数
select round(1000,1)
select round(1000.5656,1) -- 四舍五入,保留小数点后1位
字符串函数:
示例;
char_length(s) -- 返回字符串s的字符数
length(s) -- 返回值为字符串s的长度,单位为字节
-- 示例:查找员工表中姓名只有两位的员工有哪些?
select 姓名,部门 from 员工 where char_length(姓名)=2
-- 示例:将员工表的身份证从第三位到第七位进行掩码操作,确保身份证号不会泄露
select 姓名,insert (身份证号码,3,5,'*****') as 身份证号码
-- 使用left,right提取字符
select left ('abcd',2),right('abcd',2)
示例:查询员工表张姓员工有哪些
select 姓名,部门 from 员工 where 姓名 like '张%'
select 姓名,部门 from 员工 where left (姓名,1)='张'
示例:查询电话号码为北京区号的员工及手机号
select 姓名,部门,电话号码 from 员工 where left (电话号码,3)='010'
select 姓名,部门,left(出生日期,4) as 出生年份 from 员工 where left (出生日期,4)='1977'
select 姓名,部门,left(目前薪资,1) as test from 员工
select 姓名,部门,电话号码 from 员工 where trim(姓名)='李明'
select concat('aaa',space(5),'bbb')
Replace(s,s1,s2):用字符s2代替s中的字符串s1
select replace('hello','l','x')
示例:将员工表中的家庭住址一栏中 东莞市 替换为 广东省东莞市
select 姓名,replace(家庭住址,'东莞市','广东省东莞市')as 家庭住址 from 员工
Substring(s,n,len):获取从字符串s中的第n个位置开始长度为len的字符串
select substring('hello',2,2)
-- 取最左边两个字符
select substring('hello',1,2)
-- 取最右边两个字符
select substring('hello world',char_length('hello world')-1,2)
示例:查找员工表中身份证号的第三位为7的员工,显示姓名和身份证号
select 姓名,身份证号码 from 员工 where substring(身份证号码,3,1)=7
示例:查找员工表中身份证号码倒数第三位为7的员工信息
select 姓名,身份证号码 , substring(身份证号码,char_length(身份证号码)-2,1)as 倒数第三位号码 from 员工 having 倒数第三位号码='7'
Instr(s,s1):从字符串s中获取s1的开始位置
select Instr('hello','l')
日期时间函数:
select curdate(),curtime()
select now()
select year(now())as 年,month(now())as 月,day(now())as 日,hour(now())as 时,minute(now())as 分,second(now())as 秒
select dayname(now())
select Dayofweek(now())
select week(curdate())
select Quarter(curdate())
1.查询本日寿星从员工表,显示字段:姓名,部门,生日
select 姓名,部门,出生日期 from 员工 where month(now())=month(出生日期) and day(now())=day(出生日期)
2.将本月寿星导出至一张表中:本月寿星名单,姓名,部门,生日
create table '本月寿星名单' select 姓名,部门,出生日期 from 员工 where month(出生日期)=month(now())
Datediff(d1,d2):计算日期d1~d2之间相隔的天数
Adddate(d,n):计算起始日期d加上n天的日期
select datediff(curdate(),'2010-10-1')Adddate(d,interval expr type):计算起始日期d加上一个时间段后的日期
select adddate(curdate(),7) as 一周后,adddate(curdate(),-7) as 一周
前,adddate(curdate(),1)as 明天,adddate(curdate(),1) as 昨
天,adddate(curdate(),2) as 后天,adddate(curdate(),-2)as 前天
select adddate(curdate(),interval -2 year)
select adddate(curdate(),interval 2 day)
select adddate(curdate(),interval 2 month)
subdate (d,n):计算起始日期d减去n天后的日期
subdate(d,interval expr type):计算起始日期d减去一个时间段后的日期
select subdate(curdate(),2)
select subdate(curdate(),interval 2 day)
select subdate(curdate(),interval 2 year)
1-从员工表中找出30年都没有加薪的员工(姓名,部门,目前薪资,加薪日期)
select 姓名,部门,目前薪资,加薪日期 from 员工 where subdate(curdate(),interval 30 year)>加薪日期
select 姓名,部门,目前薪资,加薪日期 from 员工 where year(curdate())-year(加薪日期)>30
select 姓名,部门,目前薪资,加薪日期 from 员工 where timestampdiff(year,加薪日期,curdate())>30
2-将最近一次加薪的员工找出来,显示:姓名,部门,目前薪资,加薪日期)
select 姓名,部门,目前薪资,加薪日期 from 员工 order by
加薪日期 desc limit 1
3-将以上员工加薪1000元,同时将加薪时间更新
update员工set目前薪资=目前薪资+1000,加薪日期=curdate()
where员工编号in
(select t.员工编号from (
select员工编号from员工
where timestampdiff(year,加薪日期,curdate())>30)t)
条件判断函数:
select 姓名,if(性别=0,'男','女') as 性别 from 员工
系统信息函数:
加密函数
select md5('123456') as 加密后的密码