MySQL内置函数学习笔记

编程 · 05-17 · 360 人浏览

字符串相关

在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;
MySQL
Theme Jasmine by Kent Liao