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()用于处理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 是流程控制语句,可以在SQL语句中使用case when 来获取更加准确和直接的结果。SQL中的case when类似于编程语言中的if else或者switch。
case when的语法有两种
CASE [col_name] WHEN [value1] THEN [result1] ... ELSE [default] END CASE WHEN [expr] THEN [result1] ... ELSE [default] END
select 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)
- 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)
- 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)
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)
- select sum(salary) from employee;
- +-------------+
- | sum(salary) |
- +-------------+
- | 14500 |
- +-------------+
- 1 row in set (0.00 sec)
- select avg(salary) from employee;
- +-------------+
- | avg(salary) |
- +-------------+
- | 4833.3333 |
- +-------------+
- 1 row in set (0.00 sec)
- select max(salary) from employee;
- +-------------+
- | max(salary) |
- +-------------+
- | 5500 |
- +-------------+
- 1 row in set (0.00 sec)
- select min(salary) from employee;
- +-------------+
- | min(salary) |
- +-------------+
- | 4500 |
- +-------------+
- 1 row in set (0.00 sec)
- select md5("md5");
- +----------------------------------+
- | md5("md5") |
- +----------------------------------+
- | 1bc29b36f623ba82aaf6724fd3b16718 |
- +----------------------------------+
- 1 row in set (0.01 sec)