天天看點

MySQL 常用函數 2022/09/06

🔥MySQL 内置函數 🔥
MySQL函數指的是MySQL資料庫提供的内置函數,包含數學函數、字元串函數、日期和時間函數、聚合函數、條件判斷函數等,這些内置函數可以幫助使用者更友善的處理表中的資料簡化使用者的操作。
函數描述數學函數如ABS、SQRT、MOD、SIN、COS、TAN、COT等字元串函數如LENGTH、LOWER、UPPER、TRIM、SUBSTRING等日期和時間函數如NOW、CURDATE、CURTIME、SYSDATE、DATE_FORMAT、YEAR、MONTH、WEEK等聚合函數COUNT、SUM、AVG、MIN、MAX條件判斷函數IF、IFNULL、CASE WHEN等系統資訊函數VERSION、DATABASE、USER等加密函數MD5、SHA1、SHA2等
函數now()
now函數用于傳回目前的日期和函數。
select now();
+---------------------+
| now()               |
+---------------------+
| 2022-09-07 13:06:30 |
+---------------------+
1 row in set (0.00 sec)
應用場景:
在實際應用中,大多數業務表都會帶一個建立時間create_time字段,用于記錄每一條資料産生時間。在向表中插入資料時,就可以在insert語句中使用now()函數。
create table tb_user(id int not null auto_increment primary key,
name varchar(30) comment '姓名', create_time datetime comment '建立時間');desc tb_user;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id          | int         | NO   | PRI | NULL    | auto_increment |
| name        | varchar(30) | YES  |     | NULL    |                |
| create_time | datetime    | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)mysql> insert into tb_user(name,create_time) values('大哥',now());
Query OK, 1 row affected (0.01 sec)

mysql> select * from tb_user;
+----+------+---------------------+
| id | name | create_time         |
+----+------+---------------------+
|  1 | 大哥 | 2022-09-07 13:23:53 |
+----+------+---------------------+
1 row in set (0.00 sec)
函數date_format()
用于指定格式顯示日期/時間
select date_format(now(),'%Y/%m/%d %H:%i:%s');
+----------------------------------------+
| date_format(now(),'%Y/%m/%d %H:%i:%s') |
+----------------------------------------+
| 2022/09/07 13:57:07                    |
+----------------------------------------+
1 row in set (0.01 sec)
使用場景
在實際應用中,一般會按照标準格式存儲日期/時間,如2020-12-12 12:12:12 。在查詢使用資料時,往往又會有不同的格式要求,這時就需要使用date_format()函數進行格式轉換。
select name,date_format(create_time,'%Y/%m/%d') from tb_user;
+------+-------------------------------------+
| name | date_format(create_time,'%Y/%m/%d') |
+------+-------------------------------------+
| 大哥 | 2022/09/07                          |
+------+-------------------------------------+
1 row in set (0.01 sec)
 🔥聚合函數 🔥
聚合函數是對一組值進行計算,并傳回單個值。MySQL常用的聚合函數有5個,分别是count、sum、avg、min和max。
函數描述count傳回符合條件的記錄總數sum傳回指定列的總和,忽略空值avg傳回指定列的平均值,忽略空值min傳回指定列的最小值,忽略空值max傳回指定列的最大值,忽略空值
 🔥函數ifnull() 🔥
函數ifnull()用于處理NULL值。ifnull(v1,v2),如果v1的值不為NULL,則傳回v1,否則傳回v2。
mysql> select ifnull('大哥','張三');
+-----------------------+
| ifnull('大哥','張三') |
+-----------------------+
| 大哥                  |
+-----------------------+
1 row in set (0.00 sec)

mysql> select * from tb_user;
+----+------+---------------------+
| id | name | create_time         |
+----+------+---------------------+
|  1 | 大哥 | 2022-09-07 13:23:53 |
+----+------+---------------------+
1 row in set (0.00 sec)

mysql> select ifnull('李四','王五');
+-----------------------+
| ifnull('李四','王五') |
+-----------------------+
| 李四                  |
+-----------------------+
1 row in set (0.00 sec)

mysql> select ifnull(null,'老二');
+---------------------+
| ifnull(null,'老二') |
+---------------------+
| 老二                |
+---------------------+
1 row in set (0.00 sec)
🔥 case when 🔥 
case when 是流程控制語句,可以在SQL語句中使用case when 來擷取更加準确和直接的結果。SQL中的case when類似于程式設計語言中的if else或者switch。<br>
case when的文法有兩種
CASE [col_name] WHEN [value1] THEN [result1] ... ELSE [default] END

CASE WHEN [expr] THEN [result1] ... ELSE [default] ENDselect id,name,case sex when '1' then '男' when '2' then '女' else '未知' end as sex from tb_user;
+----+----------+-----+
| id | name     | sex |
+----+----------+-----+
|  1 | 大哥     | 男  |
|  2 | 小妹     | 女  |
|  3 | 小妹妹   | 女  |
|  4 | 大哥哥   | 男  |
|  5 | 大哥哥哥 | 男  |
+----+----------+-----+
5 rows in set (0.00 sec)
 🔥 abs() 🔥
mysql> select abs(-10);
+----------+
| abs(-10) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)

mysql> select abs(-100.00);
+--------------+
| abs(-100.00) |
+--------------+
|       100.00 |
+--------------+
1 row in set (0.00 sec)
🔥 length() 🔥 
mysql> select length("好好");
+----------------+
| length("好好") |
+----------------+
|              4 |
+----------------+
1 row in set (0.00 sec)

mysql> select length("好好學習");
+--------------------+
| length("好好學習") |
+--------------------+
|                  8 |
+--------------------+
1 row in set (0.00 sec)

mysql> select length("length");
+------------------+
| length("length") |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)
 🔥 count(*) 🔥 
mysql> select count(*) from tb_user;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) from employee;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.02 sec)select count(*) from tb_user where sex='1';
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)select count(*) from tb_user where sex='2';
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)
 🔥 sum() 🔥 
select sum(salary) from employee;
+-------------+
| sum(salary) |
+-------------+
|       14500 |
+-------------+
1 row in set (0.00 sec)
🔥 avg() 🔥  
select avg(salary) from employee;
+-------------+
| avg(salary) |
+-------------+
|   4833.3333 |
+-------------+
1 row in set (0.00 sec)
🔥 max() 🔥  
select max(salary) from employee;
+-------------+
| max(salary) |
+-------------+
|        5500 |
+-------------+
1 row in set (0.00 sec)
🔥 min() 🔥 
select min(salary) from employee;
+-------------+
| min(salary) |
+-------------+
|        4500 |
+-------------+
1 row in set (0.00 sec)
 🔥 md5() 🔥 
select md5("md5");
+----------------------------------+
| md5("md5")                       |
+----------------------------------+
| 1bc29b36f623ba82aaf6724fd3b16718 |
+----------------------------------+
1 row in set (0.01 sec)