进学阁

业精于勤荒于嬉,行成于思毁于随

0%

MySQL常用函数

字符串函数:

函数 功能
CANCAT(S1,S2,…Sn) 连接 S1,S2,…Sn 为一个字符串
LENGTH(str) 计算字符串长度函数,返回字符串的字节长度
LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符,s=1表示第一个字符
RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符
LOWER(str) 将字符串str中所有字符变为小写
UPPER(str) 将字符串str中所有字符变为大写
LTRIM(str) 去掉字符串str左侧的空格
RTRIM(str) 去掉字符串str行尾的空格
REPLACE(str,a,b) 用字符串b替换字符串str中所有出现的字符串a
TRIM(str) 去掉字符串行尾和行头的空格
substr/substring 截取字符串,返回从指定位置开始的指定长度的字符换
reverse(str) 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

substring使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 12  6
select length('javacode2018'),length('路人');
-- 路人 路人甲JAVA
select left('路人甲JAVA',2),left('路人甲JAVA',10);
/** 第三个字符之后的子字符串:inese **/
SELECT substring('chinese', 3);
/** 倒数第三个字符之后的子字符串:ese **/
SELECT substring('chinese', -3);
/** 第三个字符之后的两个字符:in **/
SELECT substring('chinese', 3, 2);
/** 倒数第三个字符之后的两个字符:es **/
SELECT substring('chinese', -3, 2);
/** 第三个字符之后的子字符串:inese **/
SELECT substring('chinese' FROM 3);
/** 倒数第三个字符之后的子字符串:ese **/
SELECT substring('chinese' FROM -3);
/** 第三个字符之后的两个字符:in **/
SELECT substring('chinese' FROM 3 FOR 2);
/** 倒数第三个字符之后的两个字符:es **/
SELECT substring('chinese' FROM -3 FOR 2);

数值函数:

函数 功能
ABS(x) 返回 x 的绝对值
SQRT(x) 返回 x 的求二次方根
CEIL(x)/CEILING(x) 返回大于 x 的最小整数值
FLOOR(x) 返回小于 x 的最大整数值
MOD(x,y) 返回 x/y 的模
RAND() 返回 0 到 1 内的随机值。传入整数参数时,用来产生重复序列
ROUND(x,y) 返回参数 x 的四舍五入的有 y 位小数的值
POW(x,y)/POWER(x,y) 返回计算x的y次方

使用示例:

1
2
3
4
5
6
7
8
9
10
11
-- 5  NULL
select sqrt(25),sqrt(-9);
-- -2 3
select ceil(-2.5),ceiling(2.5);
-- 5 5 -4 -5
select floor(5),floor(5.66),floor(-4),floor(-4.66);
-- -7 -8 3
select round(-6.6),round(-8.44),round(3.44);
-- 0.04 1000
select pow(5,-2),pow(10,3);

日期时间函数:

函数 功能
CURDATE() / current_date() 当前日期
CURTIME() / current_time() 当前时间
NOW() / sysdate() 当前的日期和时间
UNIX_TIMESTAMP(date) 获取日期date的UNIX 时间戳
FROM_UNIXTIME 将UNIX 时间戳格式化
dayofweek 获取指定日期是一周中是第几天,返回值范围是1~7,1=周日
WEEK(date) 日期 date 为一年中的第几周,返回值的范围是否为 0-52 或 1-53
dayofyear 获取指定曰期是一年中的第几天,返回值范围是1~366
YEAR(date) 日期 date 的年份
dayofmonth 获取指定日期是一个月中是第几天,返回值范围是1~31
HOUR(time) time 的小时值
MINUTE(time) time 的分钟值
DATE_FORMAT(date,fmt) 按字符串 fmt 格式化日期 date 值
DATE_ADD(date,INTERVAL expr type)/adddate 一个日期或时间值加上一个时间间隔的时间值
DATE_SUB/subdate 都是向日期减去指定的时间间隔
DATEDIFF(expr,expr2) 起始时间 expr 和结束时间 expr2 之间的天数

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 2019-09-17 16:13:28   2019-09-17 16:13:28
select now(),sysdate();
-- 12
select month('2017-12-15');
-- 1
select dayofmonth('2019-01-01');
-- 2019-01-11
select date_add('2019-01-01',INTERVAL 10 day);
-- 2018-12-22
select date_sub('2019-01-01',INTERVAL 10 day);
-- 1
select datediff('2017-11-30','2017-11-29');
-- 20171130
select date_format('2017-11-30','%Y%m%d');
-- 1
select weekday(now());
-- 1303195194
select unix_timestamp();
-- 2020-06-19 00:00:00
SELECT FROM_UNIXTIME(1592515200, '%Y-%m-%d %H:%i:%s');


流程函数:

主要指case…when…函数:

函数 功能
IF(expr,v1,v2) 当 expr 为真是返回 v1 的值,否则返回 v2
IFNULL(v1,v2) v1为空返回v2,否则返回v1
case 多条件判断

case语句有2种写法:

:::tips
CASE <表达式>

WHEN <值1> THEN <操作>

WHEN <值2> THEN <操作>

ELSE <操作>

END CASE;

CASE

WHEN <条件1> THEN <命令>

WHEN <条件2> THEN <命令>

ELSE commands

END CASE;

:::

使用示例:

1
2
3
4
5
-- 1 x yes
select if(1<2,1,0) c1,if(1>5,'√','×') c2,if(strcmp('abc','ab'),'yes','no') c3;
-- 12345 非空
select ifnull(null,'12345'),ifnull('非空','为空');

聚合函数:

分组时,可以使用聚合函数。

函数 功能
max 查询指定列的最大值
min 查询指定列的最小值
count 统计查询结果的行数
sum 求和,返回指定列的总和
avg 求平均值,返回指定列数据的平均值