MySQL 常用函数学习总结

1、数值函数

➢ 数学计算

○ ABS(x) 返回x的绝对值

SELECT ABS(-2);

○ EXP(x) 返回 e 的 x 次方

SELECT EXP(2);

○ LN 返回数字的自然对数

SELECT LN(2);

○ OG(x) 返回自然对数(以 e 为底的对数)

SELECT LOG(20.085536923188);

○ POW(x,y)/POWER(x,y) 返回 x 的 y 次方

SELECT POW(2,3);
SELECT POWER(2,3);

○ SQRT(x) 返回x的平方根

SELECT SQRT(25);

○ MOD(N,M) N除以M取余

select MOD(21,10);

-- 1

➢ 四舍五入

○ CEIL(x)/CEILING(x) 返回大于或等于 x 的最小整数

SELECT CEIL(1.5);
SELECT CEILING(1.5); 

○ FLOOR(x) 返回小于或等于 x 的最大整数

SELECT FLOOR(1.5);

○ ROUND(x,y) 返回 x 保留y位小数,最后一位四舍五入

SELECT ROUND(1.23456);
 

○ TRUNCATE(x,y) 返回x 保留 y 位小数的值,最后一位不四舍五入,注意y为负数时向前截取,被截取的位数变为0

SELECT TRUNCATE(1.23456,3);

➢ 格式化函数

○ FORMAT(x,n) 将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入

SELECT FORMAT(250500.5634, 2); 

➢ 聚合函数

○ MAX(expression) 返回字段 expression 中的最大值

SELECT MAX(price) FROM tt;

○ MIN(expression) 返回字段 expression 中的最小值

SELECT MIN(price) FROM tt;

○ AVG(expression) 返回一个表达式的平均值

-- expression 是一个字段
SELECT AVG(score) FROM sc;

○ SUM(expression) 返回指定字段的总和

SELECT SUM(price) FROM tt;

○ COUNT(expression) 返回指定字段不为NULL的行数

SELECT COUNT(price) FROM tt;

○ GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值

SELECT GREATEST(1, 12, 44, 12);
 

○ LEAST(expr1, expr2, expr3, …) 返回列表中的最小值

SELECT LEAST(3, 12, 34, 8, 25);

➢ 其他函数

○ RAND() 返回 0 到 1 的随机数

SELECT RAND();

○ SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1

SELECT SIGN(-10);

2、字符串函数

➢ 获取字符串首字母ASCII 码

○ ASCII 返回字符串 s 的第一个字符的 ASCII 码

SELECT ASCII('AB');

➢ 获取字符串长度

○ LENGTH/CHAR_LENGTH(s)/CHARACTER_LENGTH(s) 返回字符串 s 的字符数

SELECT LENGTH('1234');

➢ 字符串拼接

○ CONCAT(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串

SELECT CONCAT('hel','llo');

➢ 字符串查找

○ FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置

-- 注意s2是一个集合,并非字符串,只有s1为s2的元素是才能找到
SELECT FIND_IN_SET("c", "a,b,c,d,e");

○ LOCATE(s1,s) 从字符串 s 中获取 s1 的第一次出现的位置,从1开始,未找到返回0

SELECT LOCATE('st','myteststring');

○ POSITION(s1 IN s) 从字符串 s 中获取 s1 的开始位置

SELECT POSITION('b' in 'abc');

-- 2

○ INSTR(str,substr) 从字符串 str 中获取 substr 的第一次出现的位置,从1开始,未找到返回0

SELECT INSTR("234242","34")

-- 2

➢ 字符串替换

○ INSERT(s1,x,len,s2) 字符串s1 中从 x 开始,长度为 len 的字符串 替换为 s2

SELECT INSERT("google.com", 1, 6, "runnob");

○ REPLACE(str,from_str,to_str) 将字符串 str 中的 from_str 替换为 to_str

SELECT REPLACE("123456789","123","321")
-- 321456789

➢ 字符串大小写转换

○ LCASE(s)/LOWER(s) 将字符串 s 的所有字母变成小写字母

SELECT LOWER('RUNOOB');

○ UCASE(s)/UPPER(s) 将字符串 s 的所有字母变成大写字母

SELECT UCASE('runoob');

➢ 字符串空格去除

○ TRIM(s) 去掉字符串 s 开始和结尾处的空格

SELECT TRIM('    RUNOOB    ');

○ LTRIM(s) 去掉字符串 s 开始处的空格

SELECT LTRIM('    RUNOOB    ');

○ RTRIM(s) 去掉字符串 s 结尾处的空格

SELECT RTRIM('    RUNOOB    ');

➢ 字符串截取

○ SUBSTR/SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

SELECT SUBSTR("RUNOOB", 2, 3);
SELECT SUBSTRING("RUNOOB", 2, 3);

○ LEFT(str,len) 返回字符串str左边len个字符

SELECT LEFT("123456789",4)

-- 1234

○ RIGHT(str,len) 返回字符串str右边len个字符

SELECT RIGHT("123456789",4)

-- 6789

➢ 字符串其他操作

○ REPEAT(s,n) 将字符串 s 重复 n 次

SELECT REPEAT('runoob',3);

-- runoobrunoobrunoob

○ REVERSE(s) 将字符串s的顺序反过来

SELECT REVERSE('abc');

-- cba

○ STRCMP(s1,s2) 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1
SELECT STRCMP("runoob", "runoob");

-- 0

3、时间函数

➢ 获取当前时间

○ NOW() 返回当前日期和时间

select NOW();

-- 2024-01-22 16:04:05

○ CURDATE()/CURRENT_DATE() 返回当前日期

SELECT CURDATE();
SELECT CURRENT_DATE();

-- 2024-01-22

○ CURRENT_TIME()/CURTIME() 返回当前时间

SELECT CURRENT_TIME();

-- 15:11:15

○ CURRENT_TIMESTAMP() 返回当前日期和时间

SELECT CURRENT_TIMESTAMP();

-- 2024-01-22 15:11:27

➢ 时间计算

○ ADDDATE(d,n) 计算起始日期 d 加上 n 天的日期

SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);

-- 2017-06-25

○ ADDTIME(t,n) 时间 t 加上 n 秒的时间

SELECT ADDTIME('2011-11-11 11:11:11', 5);

-- 2011-11-11 11:11:16

➢ 时间转换

○ DATE() 从日期或日期时间表达式中提取日期值

SELECT DATE("2024-06-15 11:11:16");

-- 2024-06-15

○ YEAR(d) 返回日期值 d 的年部分

SELECT YEAR("2024-06-15"); 

-- 2024

○ MONTH(d) 返回日期值 d 的月部分

SELECT MONTH("2024-06-15"); 

-- 6

○ DAY(d) 返回日期值 d 的日部分

SELECT DAY("2024-06-15"); 

-- 15

○ HOUR(d) 返回日期值 d 的时部分

SELECT HOUR("2017-06-15 11:11:16");

-- 11

○ MINUTE(d) 返回日期值 d 的分部分

SELECT MINUTE("2017-06-15 11:11:16");

-- 11

○ SECOND(d) 返回日期值 d 的日期秒部分

SELECT SECOND("2017-06-15 11:11:16");

-- 16

○ EXTRACT(type FROM d) 从日期 d 中获取指定的值,type 指定返回的值

SELECT EXTRACT(MINUTE FROM '2011-12-13 14:15:16');
-- 15
SELECT EXTRACT(DAY FROM '2011-12-13 14:15:16');
-- 13
SELECT EXTRACT(MONTH FROM '2011-12-13 14:15:16');
-- 12
SELECT EXTRACT(YEAR FROM '2011-12-13 14:15:16');
-- 2011

○ UNIX_TIMESTAMP(d) 得到时间戳

SELECT UNIX_TIMESTAMP('2019-2-19');

-- 1550505600

○ DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday

SELECT DAYNAME('2024-11-11 11:11:11');

-- Monday

○ DAYOFMONTH(d) 计算日期 d 是本月的第几天

SELECT DAYOFMONTH('2011-11-11 11:11:11');

-- 11

○ DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推

SELECT DAYOFWEEK('2011-11-11 11:11:11');

-- 6

○ DAYOFYEAR(d) 计算日期 d 是本年的第几天

SELECT DAYOFYEAR('2011-11-11 11:11:11');

○ WEEKOFYEAR(d) 计算日期 d 是本年的第几周

SELECT WEEKOFYEAR("2017-06-15 11:11:16");

-- 24

○ QUARTER(d) 计算日期 d 是本年的第几季

SELECT QUARTER("2017-06-15 11:11:16");

○ LAST_DAY(d) 返回所在时间当月的最后一天

SELECT LAST_DAY('2011-11-11 11:11:11')

-- 2011-11-30

➢ 时间格式化

○ DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d

SELECT DATE_FORMAT('2024.11.11 11:11:11','%Y-%m-%d %r');

-- 2024-11-11 11:11:11 AM

➢ 时间比较

○ DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数

SELECT DATEDIFF('2001-01-01','2001-02-02'); 

-- -32

○ TIMESTAMPDIFF(unit,d1,d2) 按类型返回日期 d1->d2 之间相隔的数量

SELECT TIMESTAMPDIFF(YEAR,'2011-11-11 11:11:11', '2014-11-11 11:11:11')
-- 3

SELECT TIMESTAMPDIFF(MONTH,'2011-11-11 11:11:11', '2014-11-11 11:11:11')
-- 36

SELECT TIMESTAMPDIFF(DAY,'2011-11-11 11:11:11', '2014-11-11 11:11:11')
-- 1096

○ DATE_ADD(date,INTERVAL expr unit) 向前、向后偏移日期和时间,expr 可为正负

SELECT DATE_ADD("2017-06-15 11:11:16", INTERVAL 1 YEAR);

-- 2018-06-15 11:11:16

○ DATE_SUB(date,INTERVAL expr unit) 向前、向后偏移日期和时间

SELECT DATE_ADD("2017-06-15 11:11:16", INTERVAL 1 YEAR);

-- 2016-06-15 11:11:16

4、分支函数

○ IF(expr1,expr2,expr3) 条件分支,expr1为true返回expr2,否则返回expr3

SELECT IF(1>0,'yes','no');

-- yes

○ IFNULL(expr1,expr2) expr1不为null返回expr1,否则返回expr2

SELECT IFNULL("2342","1")

-- 2342

5、系统信息函数

○ VERSION()返回数据库的版本号

SELECT VERSION();

-- 8.0.25

○ 查看当前登入用户的连接次数

SELECT CONNECTION_ID();

-- 8

○ DATABASE()返回当前数据库名

SELECT DATABASE();

-- test

○ CURRENT_USER()/SESSION_USER()/SYSTEM_USER()/USER() 返回当前用户

SELECT CURRENT_USER();


6、其他函数

○ CONV(x,f1,f2) 返回 f1 进制数变成 f2 进制数

-- 将13的10进制转换为2进制
SELECT CONV(13,10,2);

-- 1101

○ INET_ATON(ip)函数 返回IP地址的数字表示

○ INET_NTOA(NUM)函数 返回数字所代表的IP地址。

○ password(str) 密码加密函数,加密是单向的(不可逆)

○ md5(str) 加密函数,该函数为字符串算出一个MD5 128比特校验,返回值以32位16进制数字的二进制字符串

○ encode(str,pswd_str) 加密函数,pswd_str 为盐值

○ decode(加密的字符串, pswd_str) 解密encode加密的函数

你可能感兴趣的:(mysql,学习,数据库)