MySQL————内置函数
1.日期函数
1.1 获得年月时间
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2025-10-15 |
+----------------+
1 row in set (0.00 sec)
1.2 获得时分秒
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 20:53:37 |
+----------------+
1 row in set (0.00 sec)
1.3 获取时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2025-10-15 20:54:21 |
+---------------------+
1 row in set (0.05 sec)
1.4 获取当前日期时间
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-10-15 20:56:18 |
+---------------------+
1 row in set (0.00 sec)
1.5 date函数:返回date参数的日期部分
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2025-10-15 |
+-------------+
1 row in set (0.00 sec)
1.6 在日期的基础上加日期
mysql> select date_add('2025-01-12',interval 10 day);
+----------------------------------------+
| date_add('2025-01-12',interval 10 day) |
+----------------------------------------+
| 2025-01-22 |
+----------------------------------------+
1 row in set (0.11 sec)mysql> select date_add(now(),interval 10 day);
+---------------------------------+
| date_add(now(),interval 10 day) |
+---------------------------------+
| 2025-10-25 21:09:52 |
+---------------------------------+
1 row in set (0.00 sec)
1.7 计算两个日期之间相差多少天
mysql> select datediff(now(),'2024-09-19');
+------------------------------+
| datediff(now(),'2024-09-19') |
+------------------------------+
| 391 |
+------------------------------+
1 row in set (0.01 sec)
2.字符串函数
2.1 charset函数
mysql> select charset('abcd');
+-----------------+
| charset('abcd') |
+-----------------+
| utf8 |
+-----------------+
1 row in set (0.02 sec)--获取emp表的ename列的字符集
select charset(ename) from EMP;
2.2 concat函数
mysql> select concat('a','b',12,3.12);
+-------------------------+
| concat('a','b',12,3.12) |
+-------------------------+
| ab123.12 |
+-------------------------+
1 row in set (0.00 sec)
--要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from student;
2.3 instr函数
--1234在abcd1234efg的起始位置是5
mysql> select instr('abcd1234efg','1234');
+-----------------------------+
| instr('abcd1234efg','1234') |
+-----------------------------+
| 5 |
+-----------------------------+
1 row in set (0.07 sec)
2.4 ucase函数
mysql> select ucase('abcd1234');
+-------------------+
| ucase('abcd1234') |
+-------------------+
| ABCD1234 |
+-------------------+
1 row in set (0.00 sec)
2.5 lcase函数
mysql> select lcase('ABCD1234');
+-------------------+
| lcase('ABCD1234') |
+-------------------+
| abcd1234 |
+-------------------+
1 row in set (0.00 sec)
2.6 left函数
mysql> select left('abcd1234',3);
+--------------------+
| left('abcd1234',3) |
+--------------------+
| abc |
+--------------------+
1 row in set (0.00 sec)
2.7 length函数
mysql> select length('abcd1234');
+--------------------+
| length('abcd1234') |
+--------------------+
| 8 |
+--------------------+
1 row in set (0.01 sec)--求学生表中学生姓名占用的字节数
select length(name), name from student;
注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。
比如:字母、数字算作一个字节,中文表示多个字节数(与字符集编码有关)
2.8 replace函数
--将emp表中所有名字中有S的替换成'上海'
mysql> select ename,replace(ename,'S','上海') from emp;
+--------+-----------------------------+
| ename | replace(ename,'S','上海') |
+--------+-----------------------------+
| SMITH | 上海MITH |
| ALLEN | ALLEN |
| WARD | WARD |
| JONES | JONE上海 |
| MARTIN | MARTIN |
| BLAKE | BLAKE |
| CLARK | CLARK |
| SCOTT | 上海COTT |
| KING | KING |
| TURNER | TURNER |
| ADAMS | ADAM上海 |
| JAMES | JAME上海 |
| FORD | FORD |
| MILLER | MILLER |
+--------+-----------------------------+
14 rows in set (0.13 sec)
2.8 substring函数
--截取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)
2.9 补充案例
以首字母小写的方式显示所有员工的姓名
mysql> select ename,concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;
+--------+--------------------------------------------------------+
| ename | concat(lcase(substring(ename,1,1)),substring(ename,2)) |
+--------+--------------------------------------------------------+
| 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.数学函数
3.1 绝对值
select abs(-998);
3.2 向上取整
select ceiling(23.04);
4.其它函数
4.1 user() 查询当前用户
mysql> select user();
+--------+
| user() |
+--------+
| root@ |
+--------+
1 row in set (0.00 sec)
4.2 md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
mysql> select md5('admin');
+----------------------------------+
| md5('admin') |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
1 row in set (0.00 sec)
4.3 database()显示当前正在使用的数据库
select database();
4.4 password()函数,MySQL数据库使用该函数对用户加密
mysql> select password('root');
+-------------------------------------------+
| password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
4.5 ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
select ifnull('abc', '123');
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc |
+----------------------+
1 row in set (0.01 sec)select ifnull(null, '123');
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123 |
+---------------------+
1 row in set (0.00 sec)