mysql常见内置函数+示例

tech2023-02-08  85

mysql内置函数

1,数学函数

ABS(x):返回x的绝对值CEIL(x),CEILIN(x):返回不小于x的最小整数值Floor(x):返回不大于x的最大整数值Rand():返回O~1的随机数and(x):返回O~1的随机数,x值相同时返回随机数相同Sign(x):返回参数作为-1,0或1的符号,该符号取决于x的值为负、零或正Pi():返回[的值,默认的显示小数位数是7位truncate(x,y):返回数值x保留到小数点后y位的值Round(x):返回离x最近的整数round(x,y):返回数值x保留到小数点后y位的值,但要四舍五入

例子:

保留小数点后两位 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)

2,字符串函数

Char_length(s):返回字符串s的字符数Length(s):返回值为字符串s的长度,单位为字节Concat(s1,s2,…):返回结果为连接参数产生的字符串Insert(sl,x,len,s2):将字符串s2替换s1的x位置开始长度为len的字符串Upper(s),ucase(s):将字符串s的所有字母都变成大写字母left(s,n):从字符s开始的前n个字符right(s,n):从字符串s开始,返回右边的n个字符

示例:

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’)

日期时间函数

Curdate(),current_date():返回当前日期Curtime(),current_time():返回当前时间now(),current_timestamp(),localtime(),sysdate(),localtimestamp():返回当前日期和时间Month(d):返回日期d中的月份值,范围是1~12Dayname(d):返回日期d是星期几Dayofweek(d):返回日期是星期几,1表示星期日Week(d):计算机日期d是本年的第几个星期Dayofyear(d):计算日期d是本年的第几天Dayofmonth(d):计算日期d是本月的第几天Year(d):返回日期的年份值Quarter(d):返回日期d是第几季度,范围是1~4Hour(t):返回时间t中的小时值Minute(t):返回时间t中的分钟值Second(t):返回时间t中的秒钟值Extract(type from d):从日期d中获取指定的值,type指定返回的值,如year,hour等时间转换为秒Time_to_sec(t):将时间t转换为秒

日期函数

1,查询本日寿星(从员工表),显示字段:姓名,部门,生日 select 姓名,部门,出生日期 from 员工 where month(出生日期)=month(now()) and day(出生日期)=day(now()) 2、将本月寿星导出至一张表中:本月寿星名单,姓名,部门,生日

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)

Md5(str):对字符串str进行加密。经常用于对普通数据进行加密

示例: 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

datediff(cast(‘2010-10-1’ as date),…)select ‘100’+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的值

最新回复(0)