盘点MySQL中常用的函数
一、介绍
在平常使用MySQL的过程中,我们常常会使用到其中的函数。有些函数常用,就会非常熟悉,但有些不经常使用就会十分生疏。
避免使用到的时候,到处去翻博客,干脆自己总结,记录一下,顺便也加深一下自己的印象。
二、函数
1)聚合函数
聚合函数又称为组函数,一般结合分组进行使用,用来统计和计算。
聚合函数在平常的sql
中十分常用,不需要查阅文档就应该保证熟练使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| select avg(age) from tb_user;
select count(1) from tb_user; select count(*) from tb_user; select count(name) from tb_user;
select max(age) from tb_user;
select min(age) from tb_user;
select sum(age) from tb_user;
select sex, group_concat(name) from tb_user group by sex;
|
需要注意的是,聚合函数不会对null
值进行计算。由于它会略过null
值,具体业务情况需要酌情分析。
2)字符串函数
在处理字符串上,MySQL
也有一套自己的处理函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| select concat('000', '111', '222'); select concat('000', null, '222');
select '000' '111' '222';
select concat_ws('-', '000', '111', '222'); select concat_ws(null, '000', '111', '222'); select concat_ws('-', '000', null, '222');
select length('0123456'); select length('半月无霜');
select reverse('0123456'); select reverse('半月无霜');
select upper('ABCD');
select upper('abcd');
select left('0123456', 2);
select right('0123456', 2);
select lpad('1', 5, '0');
select rpad('1', 5, '0');
select ltrim(' 1000');
select rtrim('1000 ');
select trim(' 1000 ');
select repeat('1000', 3);
select replace('我喜欢你', '喜欢', '讨厌');
select strcmp('abc', 'abc'); select strcmp('abc', 'abcd'); select strcmp('abcd', 'abc'); select strcmp('abc', null);
select substring('0123456', 2, 1); select substring('0123456', 2, 4);
select insert('0123456', 2, 1, 'A'); select insert('0123456', 2, 4, 'ABCD');
|
3)数字计算函数
除去加减乘除的符号外,数字计算上,MySQL
也提供了一些常用的数学计算函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| select abs(-1); select abs(1);
select sqrt(4); select sqrt(9);
select MOD(9, 2);
select ceil(3.14); select ceiling(3.14);
select floor(3.14);
select round(3.14); select round(2.76); select round(2.8828, 2); select round(2.8828, 3);
select rand();
select sign(0); select sign(88); select sign(-7);
select pow(2, 3); select power(2, 3);
select pi();
select sin(0.5*pi()); select sin(1);
select asin(0.8414709848078965) select asin(2);
select cos(0); select cos(pi()); select cos(1);
select acos(1); select acos(-1); select acos(2);
select tan(0); select tan(1);
select atan(0); select atan(1, 1);
select cot(1);
|
4)流程控制函数
就是判断啦
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| select if(88>60, '合格', '不合格'); select if(59>60, '合格', '不合格');
select ifnull(null, 0); select ifnull(55, 0);
select case when 80>90 then '优秀' when 80>70 then '良好' when 80>60 then '一般' else '差劲' end as rate;
|
5)日期函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| select curdate(); select current_date();
select curtime(); select 、();
select now(); select sysdate();
select unix_timestamp();
select from_unixtime(1651414009); select from_unixtime(1651414009, '%Y-%m-%d');
select year(now());
select month(now());
select monthname(now());
select day(now()); select dayofmonth(now());
select dayofyear(now());
select dayofweek('2022-05-01 10:00:00'); select dayofweek('2022-05-02 10:00:00');
select weekday('2022-05-01 10:00:00'); select weekday('2022-05-02 10:00:00');
select week(now());
select dayname(now());
select time_to_sec('00:00:11');
select sec_to_time(11);
select date_add('2022-05-01 10:00:00', INTERVAL 30 SECOND); select date_add('2022-05-01 10:00:00', INTERVAL '30:30' MINUTE_SECOND); select date_add('2022-05-01 10:00:00', INTERVAL 30 MINUTE); select date_add('2022-05-01 10:00:00', INTERVAL 2 HOUR); select date_add('2022-05-01 10:00:00', INTERVAL 2 DAY); select date_add('2022-05-01 10:00:00', INTERVAL 1 MONTH); select date_add('2022-05-01 10:00:00', INTERVAL 1 YEAR);
select date_sub('2022-05-01 10:00:00', INTERVAL 30 SECOND); select date_sub('2022-05-01 10:00:00', INTERVAL '30:30' MINUTE_SECOND); select date_sub('2022-05-01 10:00:00', INTERVAL 30 MINUTE); select date_sub('2022-05-01 10:00:00', INTERVAL 2 HOUR); select date_sub('2022-05-01 10:00:00', INTERVAL 2 DAY); select date_sub('2022-05-01 10:00:00', INTERVAL 1 MONTH); select date_sub('2022-05-01 10:00:00', INTERVAL 1 YEAR);
select addtime('2022-05-01 10:00:00', '01:30:30');
select subtime('2022-05-01 10:00:00', '01:30:30');
select datediff('2022-05-01 10:00:00', '2022-05-02 10:00:00'); select datediff('2022-05-01 23:59:59', '2022-05-02 00:00:00');
select date_format(now(), '%Y-%m-%d'); select date_format(now(), '%Y-%m-%d %T'); select date_format(now(), '%Y-%m-%d %H:%i:%s');
|
格式化参数有
参数 |
说明 |
%a |
工作日的缩写名称(Sun~Sat) |
%b |
月份的缩写名称(Jan…Dec) |
%c |
月份,数字形式(0~12) |
%D |
带有英语后缀的该月日期(0th, 2st, 3nd,…) |
%d |
该月日期,数字形式(00~31) |
%e |
该月日期,数字形式((0~31) |
%f |
微秒(000000 …999999) |
%H |
以 2 位数表示 24 小时(00~23) |
%h, %I |
以 2 位数表示 12 小时(01~12) |
%i |
分钟,数字形式(00~59) |
%j |
—年中的天数(001~366) |
%k |
以 24 小时(0~23)表示 |
%l |
以12小时(1~12)表示 |
%M |
月份名称(January~December) |
%m |
月份,数字形式(00~12) |
%p |
上午(AM) 或下午(PM) |
%r |
时间,12小时制(小时 (hh): 分钟 (mm) : 秒数 (ss) 后加 AM 或 PM) |
%S, %s |
以 2 位数形式表示秒(00~59) |
%T |
时间,24 小时制(小时 (hh): 分钟 (mm): 秒数 (ss)) |
%U |
周(00~53),其中周日为每周的第一天 |
%u |
周(00~53),其中周一为每周的第一天 |
%V |
周(01~53),其中周日为每周的第一天,和%X同时使用 |
%v |
周(01~53),其中周一为每周的第一天,和%x同时使用 |
%W |
星期标识(周日、周一、周二…周六) |
%w |
—周中的每日(0= 周日…6= 周六) |
%X |
该周的年份,其中周日为每周的第一天,数字形式,4 位数,和%V同时使用 |
%x |
该周的年份,其中周一为每周的第一天,数字形式,4位数,和%v同时使用 |
%Y |
4 位数形式表示年份 |
%y |
2 位数形式表示年份 |
%% |
%一个文字字符 |
6)类型转换函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
select cast('2022.87' as DECIMAL); select cast('2022.87' as DECIMAL(11, 2));
select cast('2022.87' as SIGNED); select cast('-2022.87' as SIGNED); select cast('2022.87' as UNSIGNED); select cast('-2022.87' as UNSIGNED);
select cast('2022-05-01 10:00:00' as DATE); select cast('2022-05-01 10:00:00' as TIME); select cast('2022-05-01 10:00:00' as DATETIME);
select cast(123 as CHAR); select cast(123 as BINARY);
select convert('abc' USING utf8); select convert('你好' USING latin1);
select '123' + 0;
select concat(0, '');
|
7)系统函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| select version();
select connection_id();
select user(); select system_user(); select session_user();
select current_user();
select database(); select schema();
select inet_aton('192.168.0.101'); select inet_aton('-111');
select inet_ntoa('3232235621'); select inet_ntoa('-222');
select last_insert_id();
select md5('123456');
select password('123456');
select encode('123456', 'abc');
select decode(encode('123456', 'abc'), 'abc')
|
三、最后
本来是想将函数的定义也放在这里的,但想了想还是分开吧,自定义函数可以和存储过程一起出。
我是半月,祝你幸福!!!