例子:
保留小数点后两位 select truncate(1011.2347658,2) 返回不小于x的最小整数 select ceil(1000.1) 返回不小于x的最大整数 select floor(1000.1) 返回0-1的随机数 select truncate (RAND(),2) Roundf返回离x最近的整数(取整) select Round(1000.1) 返回数值x保留小数点后y位的值,四舍五入 select round(1000.235432,2)
示例:
Insert(sl,x,len,s2):将字符串s2替换s1的x位置开始长度为len的字符串,mysql中字符串的索引从1开始 select insert(‘hello’,2,2,‘xxx’) Char_length(s):返回字符串s的字符数select char_length(‘hello,中国’) 查找员工表中姓名只有两位的员工有哪些select 姓名,部门 from 员工 where char_length(姓名)=2判断手机号不为10,9,11 select username mobile FROM easybuy_user WHERE CHAR_LENGTH(mobile) NOT in (9,10,11)将员工的身份证号从第3位到第7位进行掩饰操作 SELECT 姓名,INSERT(身份证号,3,5,’*****’)AS 身份证号 FROM 员工查找员工身份证号第3位为7的员工信息 SELECT 姓名,身份证号码, SUBSTRING(身份证号码,3,1) FROM 员工 WHERE SUBSTRING(身份证号码,3,1)=7 select substring(‘hello’,2,2)取最左边的2个字符,等价于left(‘hello’,2) select substring(‘hello’,1,2)取最右边的2个字符,等价于right(‘hello’,2) select substring(‘hello’,char_length(‘hello’)-1,2) select substring(‘hello world’,char_length(‘hello world’)-1,2)Instr(s,s1):从字符串s中获取s1的开始位置 select Instr(‘hello’,‘l’)select 姓名,部门,出生日期 from 员工 where month(出生日期)=month(now())
Datediff(d1,d2):计算日期d1~d2之间相隔的天数 Adddate(d,n): 计算起始日期d加上n天的日期 Adddate(d,interval expr type):计算起始日期d加上一个时间段后的日期
select datediff(curdate(),‘2010-10-1’)
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 year(curdate())-year(加薪日期)>30 第二种写法: select 姓名,部门,目前薪资,加薪日期 from 员工 where subdate(curdate(),interval 30 year)> 加薪日期 第三种写法: select 姓名,部门,目前薪资,加薪日期 from 员工 where timestampdiff(year,加薪日期,curdate())>30
2-将最近一次加薪的员工找出来,显示:姓名,部门,目前薪资,加薪日期) select 姓名,部门,目前薪资,加薪日期 from 员工 order by 加薪日期 desc limit 1
3-将以上30年未加薪的员工加薪1000元,同时将加薪时间更新 update 员工 set 目前薪资=目前薪资+1000,加薪日期=curdate() where 员工编号 in (select t.员工编号 from ( select 员工编号 from 员工 where timestampdiff(year,加薪日期,curdate())>30 ) t)
示例: select count(*) from easybuy_user where loginName=‘admin’ and password=md5(‘123456’)
cast(expression AS type) convert(expression, type)
select cast(‘100’ as SIGNED )+100 as result select convert(‘100’ ,SIGNED )+100 as result
示例:注意:此时目前薪资数据表中的类型为varchar类型 select 姓名,format(目前薪资,2) as 目前薪资 from 员工 order by cast(目前薪资 as decimal) desc
If(expr,v1,v2):如果表达式expr成立,则执行v1,否则执行v2 Ifnull(v1,v2):如果v1不为空,则显示v1的值,否则显示v2的值