共计 2887 个字符,预计需要花费 8 分钟才能阅读完成。
字符串相关
在 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;