系统函数:
- 数学函数
1、abs() pi()
2、sqrt()
3、cell() floor() round() truncate()
cell是向上取整,floor是向下取整。
注意:round负数和java里面的四舍五入有所不同
Round还可以指明位数
turncate是截断
4、power() exp()
5、rand()
得到0~1之间的随机数
例题:求每个部门平均工资
保留小数点后两位:
- 字符串函数
1、char_length() 字符串长度
2、concat() concat_ws 字符串拼接
3、insert() 替换字符串
4、lower() upper() 大小写转换
5、left() right() 从左/右截取字符串几个长度
从左边获取5个长度
从右边获取5个长度
6、lpad() rpad() 从左/右填充什么
一共8个长度,hello占了5个,剩下3个由a从左填充
给的填充的字符串长度>8,只取前3个进行填充
字符串长度已经>8,只取该字符串的前8个,不进行填充
如果取完给的字符串还不够长度,会循环取,直到达到指定长度
右填充:
7、trim() ltrim() rtrim()
ltrim():去除左边(前面)的空格
rtrim():去除右边(后面)的空格
trim():去除两边(前、后)的空格,不管中间
8、repeat() 重复字符串
9、space() 空格 replace() 替换
中间用逗号连接
中间用三个空格连接
将字符串的哪个 替换成哪个
10、strcmp() 比较字符串大小(根据ascll码值比较)
11、substring() 截取字符串长度(从1开始)
- locate() 检索字符串出现位置 同position()
- reverse() 字符串反转
14、field()
15、find_in_set()
例题:查询出楼号和门牌号 (sum的格式就是 楼号-门牌号 )
先找出-的位置
再从1位置截到-的位置
发现与预期结果多一个-,所以从-减1截止
也能使用left截取
再截第二部分
substring只给个起始位置就会一直截到末尾
所以直接
- 日期和时间函数
1、系统当前时间
NOW() SYSDATE() 年月日时分秒
SELECT CURDATE(); -- 年月日
SELECT CURRENT_DATE(); -- 年月日
SELECT CURRENT_TIME; -- 时分秒
SELECT CURTIME(); -- 时分秒
- add()
-- adddate()加上天数
SELECT ADDDATE(NOW(),40); --当前系统时间加上40天
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 MINUTE);
-- 2020-10-19 12:32:45时间 加上5 分钟
SELECT ADDDATE('2020-10-19 12:32:45',5); -- 加5 天
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 YEAR); -- 5 年
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 MONTH); -- 5 个月
-- 加上秒,最大到59
SELECT ADDTIME(NOW(),59),NOW();
3、DATEDIFF() 两个时间相差天数
例题:满20年员工信息
写法一:
写法二:
写法三:
4、DATE_FORMAT 日期格式化
2023年07月07日 10点30分33秒
注意Y(4位,如2023)和y(2位,如23)也不一样
秒是一样的
分钟,不是m是i
如d是07号,e是7号
- 季度
例题:
1、
2、
select * from employees where quarter(now()) = quarter(hiredate)
3、
可能出现 出生的周和当前时间的周不一样的情况
所以直接找出出生的月日,和当前的年进行拼接
找出是第多少个周
再筛选当前周是不是这个周
6、date_sub
- extract 从日期中提取一部分
8、
例题:
- 条件判断函数
1、
2、ifnull() 当v1不为null时,显示v1;当v1为null时,显示v2
聚合函数不统计null值,所以平均分要高
另一种方法得到:
3、
4、系统信息函数
5、其他函数
保留两位小数 三位一个逗号隔开
把字符串类型转化成整数类型
把字符串类型转换成日期类型
前面楼号和门牌号的例子 按照楼号排序是根据字符串来排序的
想根据数字进行排序
楼号一样的按照门牌号排序
例题:
将当前的年月日 和 随机数取四位 拼接成一个电子邮箱