函数

函数,在Java中我们叫方法,MySQL 函数会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。

MySQL 包含了大量并且丰富的函数,我们可以对 MySQL 常用函数进行简单的分类,大概包括数值型函数、字符串型函数、日期时间函数、聚合函数等。

MySQL 数值型函数

作 用函数名称
求绝对值ABS
求二次方根SQRT
求余数MOD
两个函数功能相同,都是返回不小于参数的最小整数,即向上取整CEIL 和 CEILING
向下取整,返回值转化为一个BIGINTFLOOR
生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列RAND
对所传参数进行四舍五入ROUND
两个函数的功能相同,都是所传参数的次方的结果值POW 和 POWER
求正弦值SIN
求反正弦值,与函数 SIN 互为反函数ASIN
求余弦值COS
求反余弦值,与函数 COS 互为反函数ACOS
求正切值TAN
求反正切值,与函数 TAN 互为反函数ATAN
求余切值COT
MySQL 字符串函数

函数名称作 用
LENGTH计算字符串长度函数,返回字符串的字节长度
CONCAT合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个
CONCAT_WSCONCAT的变种,可以将多个字符串按照统一格式进行拼接
INSERT替换字符串函数下标从1开始,INSERT(idcard,2,2,'**') : 将身份证号第二个开始连续两个替换成
LOWER将字符串中的字母转换为小写
UPPER将字符串中的字母转换为大写
LEFT从左侧字截取符串,返回字符串左边的若干个字符
RIGHT从右侧字截取符串,返回字符串右边的若干个字符
TRIM删除字符串左右两侧的空格
REPLACE将指定的字符串替换成新的字符串
SUBSTRING截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
MySQL 日期和时间函数

函数名称作 用
CURDATE 和 CURRENT_DATE两个函数作用相同,返回当前系统的日期,只包含年、月、日SELECT CURDATE() 、SELECT
CURRENT_DATE()
CURTIME 和 CURRENT_TIME两个函数作用相同,返回当前系统的时间值
NOW 和 SYSDATE两个函数作用相同,返回当前系统的日期和时间值
UNIX_TIMESTAMP获取时间戳,也可以将指定的日期转成时间戳
FROM_UNIXTIME将时间戳转成日期UNIX_TIMESTAMP()、UNIX_TIMESTAMP('2022-05-30')
MONTH获取指定日期中的月份
MONTHNAME获取指定日期中的月份英文名称
DAYNAME获取指定曰期对应的星期几的英文名称
DAYOFWEEK获取指定日期对应的一周的索引位置值,周日是1,周一是2......
WEEK获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
DAYOFYEAR获取指定曰期是一年中的第几天,返回值范围是1~366
DAYOFMONTH获取指定日期是一个月中是第几天,返回值范围是1~31
YEAR获取年份,返回值范围是 1970〜2069
TIME_TO_SEC将时间参数转换为秒数TIME_TO_SEC('2022-05-19 15:14:08')
SEC_TO_TIME将秒数转换为时间,与TIME_TO_SEC 互为反函数
DATE_ADD 和 ADDDATE两个函数功能相同,都是向日期添加指定的时间间隔 DATE_ADD('2022-05-19
15:14:08',INTERVAL 1 DAY)
DATE_SUB 和 SUBDATE两个函数功能相同,都是向日期减去指定的时间间隔DATE_SUB('2022-05-19
15:14:08',INTERVAL 1 DAY)
ADDTIME时间加法运算,在原始时间上添加指定的时间ADDTIME('2022-05-19 15:14:08','10:00:00')
SUBTIME时间减法运算,在原始时间上减去指定的时间SUBTIME('2022-05-19 15:14:08','10:00:00')
DATEDIFF获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DATE_FORMAT格式化指定的日期,根据参数返回指定格式的值,这个转换格式与Java不同 如 %Y-%m-%d %H:%i:%s
WEEKDAY获取指定日期在一周内的对应的工作日索引周一是0,周二是1.......
MySQL 聚合函数

函数名称作用
MAX查询指定列的最大值
MIN查询指定列的最小值
COUNT统计查询结果的行数
SUM求和,返回指定列的总和
AVG求平均值,返回指定列数据的平均值
MySQL 流程控制函数

函数名称作用
IF(v,v1,v2)判断v值,如果符合返回v1,不符合返回v2,流程控制
IFNULL(v1,v2)判断是否为空,v1不为空返回自己,为空返回v2
CASE WHEN... THEN WHEN...THEN ... ELSE ... END搜索语句,类似于Java中的if .... else if
.... else
CASE ... WHEN ... THEN WHEN...THEN ... ELSE ..END搜索语句,类似于Java中的Switch case
SQL练习

第一题:请你从exam_record数据表中计算所有用户完成SQL类别高难度试卷得分的截断平均值(去掉一个最大值和一个最小值后的平均值)examination_info(exam_id试卷ID,
tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间)
SELECT tag, difficulty, round(( sum( score ) - max( score ) - min( score )) /
( count( score ) - 2 ), 1 ) AS clip_avg_score FROM exam_record LEFT JOIN
examination_info ON exam_record.exam_id = examination_info.exam_id WHERE tag =
"SQL" AND difficulty = "hard"
第二题:展示出第一张表所有数据,90分以上为优,80-90良,60-80中 小于60为不及格。
SELECT id,uid, CASE WHEN score >90 THEN '优' WHEN score >80 AND score< 90 THEN
'良' WHEN score >60 AND score< 80 THEN '中' WHEN score< 60 THEN '不及格' ELSE '未知'
END FROM exam_record
 第三题:求出每个用户每个科目的平均值,并将科目放到表头(行转列)
SELECT er.id, er.uid, er.exam_id, avg( CASE ei.tag WHEN 'SQL' THEN er.score
END ) AS 'sql', avg( CASE ei.tag WHEN '算法' THEN er.score END ) AS '算法' FROM
exam_record er JOIN examination_info ei USING ( exam_id ) GROUP BY er.uid

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信