MySQL是一种关系型数据库管理系统,它提供了一组内置函数,用于处理和操作数据库中的数据。这些函数可以用于查询、插入、更新和删除数据,以及执行各种数学、字符串和日期操作。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。博文将在mysql5.7.26版下创建一个test数据库,一张goods表为例,介绍各函数的使用。
mysql >CREATE TABLE goods (
ID INT AUTO_INCREMENT PRIMARY KEY,
goods_name VARCHAR(255),
goods_price DECIMAL(10, 2),
goods_num INT,
goods_description TEXT
);
mysql> INSERT INTO goods (goods_name, goods_price, goods_num, goods_description) VALUES
-> (‘desk’, 10.00, 5, ‘这是商品1的描述’),
-> (‘book’, 20.00, 3, ‘这是商品2的描述’),
-> (‘papper’, 30.00, 7, ‘这是商品3的描述’),
-> (‘cup’, 40.00, 2, ‘这是商品4的描述’),
-> (‘apple’, 50.00, 8, ‘这是商品5的描述’),
-> (‘bag’, 60.00, 4, ‘这是商品6的描述’),
-> (‘mouse’, 70.00, 6, ‘这是商品7的描述’),
-> (‘pen’, 80.00, 9, ‘这是商品8的描述’),
-> (‘lunch_box’, 90.00, 1, ‘这是商品9的描述’),
-> (‘bench’, 100.00, 10, ‘这是商品10的描述’);
Query OK, 10 rows affected (0.07 sec)
Records: 10 Duplicates: 0 Warnings: 0
常用文本处理函数如下,有去掉字符串空格的函数,返回字符串长度的函数,有转换大小写的函数等等。
| 函数 | 说明 |
|---|---|
| Left() | 返回串左边的字符将串 |
| Length() | 返回串的长度 |
| Locate() | 找出串的一个子串 |
| Lower() | 转换为小写 |
| LTrim() | 去掉串左边的空格 |
| Right() | 返回串右边的字符 |
| RTrim() | 去掉串右边的空格 |
| Soundex() | 返回串的SOUNDEX值 |
| Substring() | 返回子串的字符 |
| Upper() | 将串转换为大写 |
| concat() | 字符串拼接函数,将多个字符串拼接为一个字符串 |
mysql> select Upper(goods_name) as good_name_up from goods;
mysql> select length(goods_name) as good_name_len from goods;
mysql> select concat(goods_name,goods_description) as good_name_and_des from goods;
mysql> select substring(goods_name,1,3) as su_goods_name from goods;
#substring(str,start,length)格式,即需要输入字段名、开始位置,长度三个参数。
mysql自带有很多日期和时间处理函数,可以用于处理日期和时间字段。
| 函数 | 说明 |
|---|---|
| AddDate() | 增加一个日期(天、周等) |
| AddTime() | 增加一个时间(时、分等) |
| CurDate() | 返回当前日期 |
| CurTime() | 返回当前时间 |
| Date() | 返回日期时间的日期部分 |
| DateDiff() | 计算两个日期之差 |
| Date_Add() | 高度灵活的日期运算函数 |
| Date_Format() | 返回一个格式化的日期或时间串 |
| Day() | 返回一个日期的天数部分 |
| Dayofweek() | 对于一个日期,返回对应的星期几 |
| Hour() | 返回一个时间的小时部分 |
| Minute() | 返回一个时间的分钟部分 |
| Month() | 返回一个日期的月份部分 |
| Now() | 返回当前日期和时间 |
| Second() | 返回一个时间的秒部分 |
| Time() | 返回一个日期时间的时间部分 |
| Year() | 返回一个日期的年份部分 |
mysql> select now();
±--------------------+
| now() |
±--------------------+
| 2023-07-27 11:17:58 |
±--------------------+
1 row in set (0.00 sec)
mysql> select curdate();
±-----------+
| curdate() |
±-----------+
| 2023-07-27 |
±-----------+
1 row in set (0.00 sec)
mysql> select curtime();
±----------+
| curtime() |
±----------+
| 11:20:26 |
±----------+
1 row in set (0.00 sec)
mysql> select date(now());
±------------+
| date(now()) |
±------------+
| 2023-07-27 |
±------------+
1 row in set (0.00 sec)
#date()函数常用于处理时间字段,时间字段包含日期和时间时,如果需要进行分组或者排序需要进行提取时间字段中的部分信息就可以使用,我们还可以提前其中的年份、月份、日期、时、分、秒等。
mysql> select adddate(‘2023-05-01’,interval 30 day);
±--------------------------------------+
| adddate(‘2023-05-01’,interval 30 day) |
±--------------------------------------+
| 2023-05-31 |
±--------------------------------------+
1 row in set (0.00 sec)
mysql> select datediff(‘1986-06-01’,‘2023-07-27’);
±------------------------------------+
| datediff(‘1986-06-01’,‘2023-07-27’) |
±------------------------------------+
| -13570 |
±------------------------------------+
1 row in set (0.00 sec)
数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算,因此没有串或日期—时间处理函数的使用那么频繁。在各类数据库管理系统中,数值函数基本是上一样的。
| 函数 | 说明 |
|---|---|
| Abs() | 返回一个数的绝对值 |
| Cos() | 返回一个角度的余弦 |
| Exp() | 返回一个数的指数值 |
| Mod() | 返回除操作的余数 |
| Pi() | 返回圆周率 |
| Rand() | 返回一个随机数 |
| Sin() | 返回一个角度的正弦 |
| sqrt() | 返回一个数的平方根 |
| Tan() | 返回一个角度的正切 |
| RADIANS() | 将角度转换为弧度 |
mysql> select rand();
±-------------------+
| rand() |
±-------------------+
| 0.7540961585511418 |
±-------------------+
1 row in set (0.00 sec)
mysql> select pi();
±---------+
| pi() |
±---------+
| 3.141593 |
±---------+
1 row in set (0.00 sec)
mysql> select sin(RADIANS(90));
±-----------------+
| sin(RADIANS(90)) |
±-----------------+
| 1 |
±-----------------+
1 row in set (0.00 sec)
mysql> select sqrt(9);
±--------+
| sqrt(9) |
±--------+
| 3 |
±--------+
1 row in set (0.00 sec)
mysql> select goods_name,goods_num from goods where mod(goods_num,2)=0;
±-----------±----------+
| goods_name | goods_num |
±-----------±----------+
| cup | 2 |
| apple | 8 |
| bag | 4 |
| mouse | 6 |
| bench | 10 |
±-----------±----------+
5 rows in set (0.00 sec)
我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成。
| 函数 | 说明 |
|---|---|
| AVG() | 返回某列的平均值 |
| COUNT() | 返回某列的行数 |
| MAX() | 返回某列的最大值 |
| MIN() | 返回某列的最小值 |
| SUM() | 返回某列值之和 |
mysql> select avg(goods_price) from goods;
±-----------------+
| avg(goods_price) |
±-----------------+
| 55.000000 |
±-----------------+
1 row in set (0.01 sec)
mysql> select count() from goods;
±---------+
| count() |
±---------+
| 10 |
±---------+
1 row in set (0.00 sec)
mysql> select goods_name,goods_price from goods where goods_price in (select max(goods_price) from goods);
±-----------±------------+
| goods_name | goods_price |
±-----------±------------+
| bench | 100.00 |
±-----------±------------+
1 row in set (0.00 sec)
mysql> select goods_name,goods_num from goods where goods_num in (select min(goods_num) from goods);
±-----------±----------+
| goods_name | goods_num |
±-----------±----------+
| lunch_box | 1 |
±-----------±----------+
1 row in set (0.00 sec)
mysql> select sum(goods_price*goods_num) as sum_sale from goods;
±---------+
| sum_sale |
±---------+
| 3270.00 |
±---------+
1 row in set (0.00 sec)