字符串相关
在MySQL中,字符串既可以使用双引号也可以使用单引号,但建议使用单引号,因为单引号属于标准SQL。
upper():转大写,转小写是lower()
- SELECT UPPER('abc');
- ABC
length():获取字节长度
- SELECT LENGTH('张三123');
- 9
char_length():获取字符个数
- SELECT CHAR_LENGTH('张三123');
- 5
concat():字符串拼接,MySQL8之后,||
只作为逻辑运算符使用,也不可以使用+进行字符串拼接
- select concat('123', 'abc');
- 123abc
lpad():左填充,右填充为rpad()
- select lpad('abc', 5, '-');
- --abc
trim():去除首尾空白,也可去除指定的前缀后缀
- select trim(' abc 123 ');
- abc 123
- select trim(leading '0' from '000111000'); -- 111000
- select trim(trailing '0' from '000111000'); -- 000111
- select trim(both '0' from '000111000'); -- 111
substr():截取字符串
- select substr('abc123', 2, 3);
- bc1
数值相关
ceil():向上取整,向下取整是floor()
- select ceil(1.5); -- 2
truncate():舍去
- select TRUNCATE(6.666, 2); -- 6.66
mod():取余
- select mod(7, 4); -- 3
round():四舍五入
- select round(3.14159, 2); -- 3.14
rand():0-1内随机浮点数,通过指定整数每次获取到相同的浮点值
- select rand();
- select rand(100);
日期时间相关
curdate():获取当前日期
- select curdate(); -- 2024-05-17
curtime():获取当前时间
-- select curtime(); -- 13:21:21
now():执行select语句的时刻。sysdate()获取的是执行sysdate()函数的时刻。
- select now();
year():获取年,月month(),日day(),时hour(),分minute(),秒second()
- select year(now()); -- 2024
dayofweek():一周中第几天(1~7),周日是1,周六是7。dayofmonth()一个月中第几天(1~31),dayofyear()一年中第几天(1~366)
- select dayofweek(now()); -- 6 周五
last_day():获取给定日期所在月最后一天日期
- select last_day(NOW()); -- 2024-05-31
date():一次性提取一个给定日期的“年月日”部分,一次性提取一个给定日期的“时分秒”部分使用time()
- select date(NOW()); -- 2024-05-17
- select time(NOW()); -- 11:30:10
date_add():向日期添加指定的时间间隔。date_add(日期, interval expr 单位):
- expr:指定具体间隔量,一般是一个数字。也可以为负数,如果为负数,效果和date_sub函数相同
- 单位:year年、month月、day日、hour时、minute分、second秒、microsecond微秒、week周、quarter季度
- select date_add(now(), interval 3 day); -- 2024-05-20 11:32:25
- 单位也可以采用复合型单位,例如:SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND几分几秒之后、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE几小时几分之后、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR几天几小时之后、YEAR_MONTH几年几个月之后
- select date_add(now(), INTERVAL '3,2' day_hour); -- 3天2小时之后
datediff():两个日期之间所差天数
- select datediff(now(), '2024-05-10'); -- 7
timediff():两个日期之间所差时间
- select timediff('2024-05-10 10:10:10', '2024-05-10 10:00:00'); -- 00:10:10
date_format():日期格式化,默认日期格式:%Y-%m-%d %H:%i:%s,%y两位年份,%h是12小时制
- select date_format(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2024-05-17 12:28:05
str_to_date():将char类型日期字符串转换成日期类型date
- select str_to_date('10/01/1985', '%m/%d/%Y'); -- 1985-10-01
流程函数
if()
- select if(true, 'ok', 'no ok'); -- ok
ifnull(x, y):空处理函数,当x为NULL时,将x当做y处理。有NULL参与的数学运算,最终结果都是NULL,此时就需要ifnull函数进行空处理
- select ifnull(null, '是null'); -- 是null
case
- select name, case gender when '男' then 1 when '女' then 2 else '变态' end as '性别' from user;
- select name, case when gender='男' then 1 when gender='女' then 2 else '变态' end as '性别' from user;
cast函数
用于将值从一种数据类型转换为另一种数据类型,语法:cast(值 as 数据类型)。
- select cast('2020-10-11' as DATE);
加密函数
md5()将给定字符串经过md5算法进行加密处理,生成一个固定长度32位字符串
- select md5('abc');
分组函数
分组函数执行原则:先分组,然后对每一组数据执行分组函数。如果没有分组语句group by的话,整张表的数据自成一组。所有分组函数都是自动忽略NULL的。
substring_index()
- select substring_index('ab-c-de-fg', '-', 1); -- ab
- select substring_index('ab-c-de-fg', '-', 2); -- ab-c
group_concat():行转列,默认逗号分隔
- select group_concat(user separator '-') from mysql.user; -- 按-分隔
- select group_concat(user order by id desc) from mysql.user;