数据库基础-内置函数

1 日期函数

在这里插入图片描述

  • 获得年月日
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2024-12-10     |
+----------------+
1 row in set (0.00 sec)

  • 获得时分秒
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 10:29:21       |
+----------------+
1 row in set (0.00 sec)

  • 获得时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2024-12-10 10:30:04 |
+---------------------+
1 row in set (0.01 sec)

  • 在日期的基础上加日期
mysql> select date_add('2022-12-10', interval 10 day);
+-----------------------------------------+
| date_add('2022-12-10', interval 10 day) |
+-----------------------------------------+
| 2022-12-20                              |
+-----------------------------------------+
1 row in set (0.02 sec)

  • 在日期的基础上减去时间
mysql> select date_sub('2022-12-10', interval 20 day);
+-----------------------------------------+
| date_sub('2022-12-10', interval 20 day) |
+-----------------------------------------+
| 2022-11-20                              |
+-----------------------------------------+
1 row in set (0.00 sec)

  • 计算两个日期之间还差多少天
mysql> select datediff('2022-10-20', '2022-9-1');
+------------------------------------+
| datediff('2022-10-20', '2022-9-1') |
+------------------------------------+
|                                 49 |
+------------------------------------+
1 row in set (0.01 sec)

1.1 例子1

mysql> create table tmp(
    -> id int primary key auto_increment,
    -> birthday date
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tmp(birthday) values(current_date());
Query OK, 1 row affected (0.01 sec)

mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2024-12-10 |
+----+------------+
1 row in set (0.00 sec)

1.2 例子2

mysql> create table msg(
    -> id int primary key auto_increment,
    -> content varchar(30) not null,
    -> sendtime datetime
    -> );
Query OK, 0 rows affected (0.27 sec)

mysql> insert into msg(content, sendtime) values('hello world', now());
Query OK, 1 row affected (0.00 sec)

mysql> insert into msg(content, sendtime) values('hello linux', now());
Query OK, 1 row affected (0.00 sec)

mysql> select * from msg;
+----+-------------+---------------------+
| id | content     | sendtime            |
+----+-------------+---------------------+
|  1 | hello world | 2024-12-10 10:40:22 |
|  2 | hello linux | 2024-12-10 10:40:33 |
+----+-------------+---------------------+
2 rows in set (0.00 sec)

  • 显示所有留言信息,发布日期只显示日期,不用显示时间
mysql> select content,date(sendtime) from msg;
+-------------+----------------+
| content     | date(sendtime) |
+-------------+----------------+
| hello world | 2024-12-10     |
| hello linux | 2024-12-10     |
+-------------+----------------+
2 rows in set (0.00 sec)

  • 请查询在2分钟内发布的贴子
mysql> select * from msg where date_add(sendtime, interval 2 minute)>now();
Empty set (0.00 sec)

2. 字符串函数

在这里插入图片描述

2.1 例子

mysql> select * from emp;
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| 007369 | SMITH  | CLERK     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
| 007499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
| 007521 | WARD   | SALESMAN  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
| 007566 | JONES  | MANAGER   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
| 007654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
| 007698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
| 007782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
| 007788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
| 007839 | KING   | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
| 007844 | TURNER | SALESMAN  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
| 007876 | ADAMS  | CLERK     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
| 007900 | JAMES  | CLERK     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
| 007902 | FORD   | ANALYST   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
| 007934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
14 rows in set (0.00 sec)

  • 获取emp表的ename列的字符集
mysql> select charset(ename) from emp;
+----------------+
| charset(ename) |
+----------------+
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
| gbk            |
+----------------+
14 rows in set (0.00 sec)
  • 要求显示student表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
mysql> select concat(name, '的语文是', chinese, '分,数学是', math, '分') as '分数' from exam_result;
+---------------------------------------------+
| 分数                                        |
+---------------------------------------------+
| 唐三藏的语文是134分,数学是98分              |
| 猪悟能的语文是176分,数学是98分              |
| 曹孟德的语文是140分,数学是90分              |
| 刘玄德的语文是110分,数学是115分             |
| 孙权的语文是140分,数学是73分                |
| 宋公明的语文是150分,数学是95分              |
+---------------------------------------------+
6 rows in set (0.00 sec)
  • 求学生表中学生姓名占用的字节数
mysql> select length(name),name from exam_result;
+--------------+-----------+
| length(name) | name      |
+--------------+-----------+
|            6 | 唐三藏    |
|            6 | 猪悟能    |
|            6 | 曹孟德    |
|            6 | 刘玄德    |
|            4 | 孙权      |
|            6 | 宋公明    |
+--------------+-----------+
6 rows in set (0.00 sec)
  • 将EMP表中所有名字中有S的替换成’上海’
mysql> select replace(ename, 'S', '上海'),ename from emp;
+-------------------------------+--------+
| replace(ename, 'S', '上海')   | ename  |
+-------------------------------+--------+
| 上海MITH                      | SMITH  |
| ALLEN                         | ALLEN  |
| WARD                          | WARD   |
| JONE上海                      | JONES  |
| MARTIN                        | MARTIN |
| BLAKE                         | BLAKE  |
| CLARK                         | CLARK  |
| 上海COTT                      | SCOTT  |
| KING                          | KING   |
| TURNER                        | TURNER |
| ADAM上海                      | ADAMS  |
| JAME上海                      | JAMES  |
| FORD                          | FORD   |
| MILLER                        | MILLER |
+-------------------------------+--------+
14 rows in set (0.00 sec)

  • 截取EMP表中ename字段的第二个到第三个字符
mysql> select substring(ename, 2, 2), ename from emp;
+------------------------+--------+
| substring(ename, 2, 2) | ename  |
+------------------------+--------+
| MI                     | SMITH  |
| LL                     | ALLEN  |
| AR                     | WARD   |
| ON                     | JONES  |
| AR                     | MARTIN |
| LA                     | BLAKE  |
| LA                     | CLARK  |
| CO                     | SCOTT  |
| IN                     | KING   |
| UR                     | TURNER |
| DA                     | ADAMS  |
| AM                     | JAMES  |
| OR                     | FORD   |
| IL                     | MILLER |
+------------------------+--------+
14 rows in set (0.00 sec)

  • 以首字母小写的方式显示所有员工的姓名
mysql> select concat(lcase(substring(ename,1, 1)), substring(ename, 2)), ename from emp;
+-----------------------------------------------------------+--------+
| concat(lcase(substring(ename,1, 1)), substring(ename, 2)) | ename  |
+-----------------------------------------------------------+--------+
| sMITH                                                     | SMITH  |
| aLLEN                                                     | ALLEN  |
| wARD                                                      | WARD   |
| jONES                                                     | JONES  |
| mARTIN                                                    | MARTIN |
| bLAKE                                                     | BLAKE  |
| cLARK                                                     | CLARK  |
| sCOTT                                                     | SCOTT  |
| kING                                                      | KING   |
| tURNER                                                    | TURNER |
| aDAMS                                                     | ADAMS  |
| jAMES                                                     | JAMES  |
| fORD                                                      | FORD   |
| mILLER                                                    | MILLER |
+-----------------------------------------------------------+--------+
14 rows in set (0.00 sec)

3.数学函数

在这里插入图片描述

  • 绝对值
mysql> select(-11.5);
+---------+
| (-11.5) |
+---------+
|   -11.5 |
+---------+
1 row in set (0.00 sec)

  • 向上取整(变大)、向下取整(变小)
mysql> select ceiling(23.04);
+----------------+
| ceiling(23.04) |
+----------------+
|             24 |
+----------------+
1 row in set (0.00 sec)

mysql> select floor(23.04);
+--------------+
| floor(23.04) |
+--------------+
|           23 |
+--------------+
1 row in set (0.00 sec)


mysql> select floor(-23.04);
+---------------+
| floor(-23.04) |
+---------------+
|           -24 |
+---------------+
1 row in set (0.01 sec)

mysql> select ceiling(-23.04);
+-----------------+
| ceiling(-23.04) |
+-----------------+
|             -23 |
+-----------------+
1 row in set (0.00 sec)


  • 保留2位小数位数(小数四舍五入)
mysql> select format(12.34567, 2);
+---------------------+
| format(12.34567, 2) |
+---------------------+
| 12.35               |
+---------------------+
1 row in set (0.00 sec)

mysql> select format(12.34367, 2);
+---------------------+
| format(12.34367, 2) |
+---------------------+
| 12.34               |
+---------------------+
1 row in set (0.00 sec)

  • 产生随机数
mysql> select rand();
+---------------------+
| rand()              |
+---------------------+
| 0.05758768139182374 |
+---------------------+
1 row in set (0.00 sec)

4.其他函数

  • user() 查询当前用户
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
mysql> select md5('hello');
+----------------------------------+
| md5('hello')                     |
+----------------------------------+
| 5d41402abc4b2a76b9719d911017c592 |
+----------------------------------+
1 row in set (0.00 sec)
  • 查看当时正在使用的数据库
mysql> select database();
+------------+
| database() |
+------------+
| test_db    |
+------------+
1 row in set (0.00 sec)

  • ifnull(val1, val2),返回结果不为空的,都不为空,优先返回val1
mysql> select ifnull('aaaa', 'bvbbbb');
+--------------------------+
| ifnull('aaaa', 'bvbbbb') |
+--------------------------+
| aaaa                     |
+--------------------------+
1 row in set (0.00 sec)

mysql> select ifnull(null, 'bvbbbb');
+------------------------+
| ifnull(null, 'bvbbbb') |
+------------------------+
| bvbbbb                 |
+------------------------+
1 row in set (0.00 sec)

mysql> select ifnull(null, null);
+--------------------+
| ifnull(null, null) |
+--------------------+
|               NULL |
+--------------------+
1 row in set (0.00 sec)

mysql> select ifnull('aaaa', null);
+----------------------+
| ifnull('aaaa', null) |
+----------------------+
| aaaa                 |
+----------------------+
1 row in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值