1. 日期函数
| 函数名称 | 描述 |
|---|---|
| current_date() | 当前日期 |
| current_time() | 当前时间 |
| current_timestamp() | 当前时间戳 |
| date(datetime) | 返回 datetime 参数的日期部分 |
| date_add(date, interval d_value_type) | 在 date 中添加日期或时间interval 后的数值单位可以是:year minute second day |
| date_sub(date, interval d_value_type) | 在 date 中减去日期或时间interval 后的数值单位可以是:year minute second day |
| datediff(date1, date2) | 两个日期的差,单位是天 |
| now() | 当前日期时间 |
- 在日期的基础上加日期
select date_add('2017-10-28', interval 10 day); +-----------------------------------------+ | date_add('2017-10-28', interval 10 day) | +-----------------------------------------+ | 2017-11-07 | +-----------------------------------------+ - 计算两个日期之间相差多少天
select datediff('2017-10-10', '2016-9-1'); +------------------------------------+ | datediff('2017-10-10', '2016-9-1') | +------------------------------------+ | 404 | +------------------------------------+ - 案例:创建一个留言表
-创建一个留言表 mysql> create table msg ( -> id int primary key auto_increment, -> content varchar(30) not null, -> sendtime datetime -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into msg(content,sendtime) values('hello1', now()); Query OK, 1 row affected (0.01 sec) mysql> insert into msg(content,sendtime) values('hello2', now()); Query OK, 1 row affected (0.00 sec) mysql> select * from msg; +----+---------+---------------------+ | id | content | sendtime | +----+---------+---------------------+ | 1 | hello1 | 2025-12-14 10:59:45 | | 2 | hello2 | 2025-12-14 10:59:45 | +----+---------+---------------------+ 2 rows in set (0.00 sec) -显示所有留言信息,发布日期只显示日期,不用显示时间 mysql> select id,content,date(sendtime) from msg; +----+---------+----------------+ | id | content | date(sendtime) | +----+---------+----------------+ | 1 | hello1 | 2025-12-14 | | 2 | hello2 | 2025-12-14 | +----+---------+----------------+ 2 rows in set (0.00 sec) -查询在2分钟内发布的帖子 mysql> insert into msg (content,sendtime) value('straykids',now()); Query OK, 1 row affected (0.00 sec) mysql> select *from msg where date_add(sendtime,interval 2 minute) >now(); +----+-----------+---------------------+ | id | content | sendtime | +----+-----------+---------------------+ | 3 | straykids | 2025-12-14 11:04:48 | +----+-----------+---------------------+2. 字符函数
| 函数 | 功能 |
|---|---|
| charset(str) | 返回字符串字符集 |
| concat(string2 [,…]) | 连接字符串 |
| instr(string, substring) | 返回 substring 在 string 中出现的位置,没有返回 0 |
| ucase(string2) | 转换成大写 |
| lcase(string2) | 转换成小写 |
| left(string2, length) | 从 string2 中的左边起取 length 个字符 |
| length(string) | string 的长度 |
| replace(str, search_str, replace_str) | 在 str 中用 replace_str 替换 search_str |
| strcmp(string1, string2) | 逐字符比较两字符串大小 |
| substring(str, position [,length]) | 从 str 的 position 开始,取 length 个字符 |
| ltrim(string)、rtrim(string)、trim(string) | 去除前空格或后空格 |
- 返回字符串字符集
mysql> select charset('abskdfhlfhfo654'); +----------------------------+ | charset('abskdfhlfhfo654') | +----------------------------+ | utf8 | +----------------------------+ 1 row in set (0.00 sec) - 显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from student; - 求学生表中学生姓名占用的字节数
select length(name), name from student;注:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数; 如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数 (utf-8中文算三个字节)
mysql> select length('123哈哈'); +---------------------+ | length('123哈哈') | +---------------------+ | 9 | +---------------------+ 1 row in set (0.00 sec) - 将EMP表中所有名字中有S的替换成'上海'
select replace(ename, 'S', '上海') ,ename from EMP;- 截取EMP表中ename字段的第二个到第三个字符
select substring(ename, 2, 2), ename from EMP; - 以首字母小写的方式显示所有员工的姓名
select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from EMP;3. 数字函数
| 函数名称 | 描述 | 常见用途 |
|---|---|---|
abs(number) | 绝对值函数 | 处理数值的非负表示 |
bin(decimal_number) | 十进制转换二进制 | 二进制数据处理、位运算场景 |
hex(decimalNumber) | 转换成十六进制 | 内存地址、编码表示等场景 |
conv(number, from_base, to_base) | 进制转换 | 多进制(如 2、8、10、16)间的数值转换 |
ceiling(number) | 向上取整 | 资源分配、数量计算的向上估算 |
floor(number) | 向下取整 | 数据分组、数量计算的向下估算 |
format(number, decimal_places) | 格式化,保留小数位数 | 数值展示的精度控制 |
rand() | 返回随机浮点数,范围 [0.0,1.0) | 随机抽样、模拟场景等 |
mod(number, denominator) | 取模,求余 | 周期判断、分组标识等 |
- 绝对值
select abs(-100.2); - 向上取整
select ceiling(23.04); - 向下取整
select floor(23.7); - 保留2位小数位数(小数四舍五入)
select format(12.3456, 2); - 产生随机数
select rand();4. 其它函数
- user() 查询当前用户
select user(); - md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
-将任意长度的输入数据映射为固定长度的 128 位哈希值(32 位十六进制字符串) -本质是实现数据的 “指纹” 标识 select md5('admin') +----------------------------------+ | md5('admin') | +----------------------------------+ | 21232f297a57a5a743894a0e4a801fc3 | +----------------------------------+ - database()显示当前正在使用的数据库
select database(); - password()函数,MySQL数据库使用该函数对用户加密
select password('root'); +-------------------------------------------+ | password('root') | +-------------------------------------------+ | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +-------------------------------------------+ 或者想要加密密码可以使用md5函数 但是存入md5函数查询也要使用 mysql> create table user_p ( -> name char(20), -> password varchar(32)); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO user_p (name,password) VALUES ('lex', md5('134565')); Query OK, 1 row affected (0.01 sec) mysql> select name from user_p where password=md5('134565'); +------+ | name | +------+ | lex | +------+ 1 row in set (0.00 sec) - ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值