当前位置: 首页 > news >正文

MySQL常用内置函数整理:提高你的查询效率

文章目录

    • 1 日期函数
      • 日期函数示例
      • 日期函数案例
        • 案例-1:创建表记录生日
        • 案例-2:创建留言表并查询指定条件数据
    • 2 字符串函数
      • 字符串函数案例
    • 3 数学函数
      • 数学函数示例
    • 4 其它函数
      • 其它函数示例

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)两个日期的差,单位是天(date1减去date2)
now()当前日期时间

日期函数示例

  1. 获得年月日:
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2025-10-25     |
+----------------+
1 row in set (0.00 sec)
  1. 获得时分秒:
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 11:51:50       |
+----------------+
1 row in set (0.00 sec)
  1. 获得时间戳:
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2025-10-25 11:52:13 |
+---------------------+
1 row in set (0.00 sec)
  1. 在日期的基础上加日期:
mysql> select date_add('2017-10-28', interval 10 day);
+-----------------------------------------+
| date_add('2017-10-28', interval 10 day) |
+-----------------------------------------+
| 2017-11-07                              |
+-----------------------------------------+
1 row in set (0.00 sec)
  1. 在日期的基础上减去时间:
mysql> select date_sub('2017-10-1', interval 2 day);
+---------------------------------------+
| date_sub('2017-10-1', interval 2 day) |
+---------------------------------------+
| 2017-09-29                            |
+---------------------------------------+
1 row in set (0.00 sec)
  1. 计算两个日期之间相差的天数:(这里注意是date1-date2!)
mysql> select datediff('2017-10-10', '2016-9-1');
+------------------------------------+
| datediff('2017-10-10', '2016-9-1') |
+------------------------------------+
|                                404 |
+------------------------------------+
1 row in set (0.00 sec)

日期函数案例

案例-1:创建表记录生日
-- 创建表
mysql>create table tmp(
id int primary key auto_increment,
birthday date
);-- 添加当前日期到表中
mysql>insert into tmp(birthday) values(current_date());-- 查询结果
mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2025-10-25 |
+----+------------+
1 row in set (0.00 sec)
案例-2:创建留言表并查询指定条件数据
-- 创建留言表
mysql> create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);-- 插入数据(使用now()获取当前日期时间)
mysql> insert into msg(content,sendtime) values('hello1', now());
mysql> insert into msg(content,sendtime) values('hello2', now());-- 查询所有留言,发布日期只显示日期(不显示时间)
mysql> select content, date(sendtime) from msg;
+---------+----------------+
| content | date(sendtime) |
+---------+----------------+
| hello1  | 2025-10-25     |
| hello2  | 2025-10-25     |
+---------+----------------+
2 rows in set (0.01 sec)-- 查询2分钟内发布的帖子
mysql> select * from msg where date_add(sendtime, interval 2 minute) > now();
-- 理解:判断“留言发布时间+2分钟”是否晚于当前时间,若是则属于2分钟内发布的帖子

2 字符串函数

函数名称描述
charset(str)返回字符串字符集
concat(string2 [, …])连接字符串
instr(string, substring)返回substring在string中第一次出现的位置,没有则返回0,下标从1开始
ucase(string2)转换成大写
lcase(string2)转换成小写
left(string2, length)从string2的左边起取length个字符
right(string2, length)从string2的右边起取length个字符
length(string)返回string的长度(以字节为单位:字母/数字占1字节,中文占多字节,与字符集相关)
replace(str, search_str, replace_str)在str中用replace_str替换所有的search_str
strcmp(string1, string2)逐字符比较两字符串大小(按字符的ASCII码值比较)
substring(str, position [, length])从str的position位置开始(position从1开始),取length个字符
ltrim(string)、rtrim(string)、trim(string)分别去除字符串的前空格、后空格、前后空格

字符串函数案例

  1. 获取emp表的ename列的字符集:
mysql> select charset(ename) from EMP;
+----------------+
| charset(ename) |
+----------------+
| utf8mb4        |
+----------------+
14 rows in set (0.00 sec)
  1. 按指定格式显示学生分数(连接字符串):
-- 假设表名为student,包含name、chinese、math字段
select concat(name, '的语文是', chinese, '分,数学是', math, '分') as '分数' from student;
  1. 求学生姓名占用的字节数:
select length(name), name from student;
-- 注意:length按字节计数,如“张三”在UTF-8编码下length结果为6(1个中文占3字节)
  1. 替换字符串中的指定内容:
-- 将EMP表中ename字段里所有的'S'替换成'上海'
select replace(ename, 'S', '上海'), ename from EMP;
  1. 截取字符串:
-- 截取EMP表中ename字段的第2个到第3个字符(从位置2开始,取2个字符)
select substring(ename, 2, 2), ename from EMP;-- (笔记补充)从EMP表中ename字段的右边起取2个字符
select right(ename, 2), ename from EMP;
  1. 转换字符大小写并拼接:
-- 以首字母小写的方式显示所有员工姓名(截取首字母转小写,再拼接剩余字符)
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)进制转换(将number从from_base进制转换为to_base进制) ,可以替代上面的进制转换函数
ceiling(number)向上去整(如3.1→4,-3.1→-3)
floor(number)向下去整(如3.7→3,-3.1→-4)
format(number, decimal_places)格式化数字,保留decimal_places位小数(小数部分四舍五入)
rand()返回随机浮点数,范围为[0.0, 1.0)
mod(number, denominator)取模(求余),结果与number的符号一致(如mod(7,3)=1,mod(-7,3)=-1)

数学函数示例

  1. 求绝对值:
mysql> select abs(-100.2);
+-------------+
| abs(-100.2) |
+-------------+
|       100.2 |
+-------------+
1 row in set (0.00 sec)
-- 结果:100.2
  1. 向上取整:
mysql> select ceiling(23.04);
+----------------+
| ceiling(23.04) |
+----------------+
|             24 |
+----------------+
1 row in set (0.00 sec)
-- 结果:24
  1. 向下取整:
mysql> select floor(23.7);
+-------------+
| floor(23.7) |
+-------------+
|          23 |
+-------------+
1 row in set (0.00 sec)
-- 结果:23
  1. 格式化数字(保留2位小数):
mysql> select format(12.3456, 2);
+--------------------+
| format(12.3456, 2) |
+--------------------+
| 12.35              |
+--------------------+
1 row in set (0.00 sec)
-- 结果:12.35(四舍五入)
  1. 生成随机数:
mysql>select rand();
+---------------------+
| rand()              |
+---------------------+
| 0.14119383333362065 |
+---------------------+
1 row in set (0.00 sec)
-- 结果:随机浮点数(如0.654321)
  1. 进制转换:
-- 将十进制10转换为二进制
mysql> select bin(10);
+---------+
| bin(10) |
+---------+
| 1010    |
+---------+
1 row in set (0.00 sec)
-- 结果:1010-- 将十进制10转换为十六进制
mysql> select hex(10);
+---------+
| hex(10) |
+---------+
| A       |
+---------+
1 row in set (0.00 sec)
-- 结果:A-- 将二进制1010(即十进制10)转换为八进制
mysql> select conv(1010, 2, 8);
+------------------+
| conv(1010, 2, 8) |
+------------------+
| 12               |
+------------------+
1 row in set (0.00 sec)
-- 结果:12
  1. 取模(求余):
mysql> select mod(7, 3), mod(-7, 3);
+-----------+------------+
| mod(7, 3) | mod(-7, 3) |
+-----------+------------+
|         1 |         -1 |
+-----------+------------+
1 row in set (0.00 sec)

4 其它函数

函数名称描述
user()查询当前登录的MySQL用户(格式为“用户名@登录主机”)
md5(str)对字符串str进行MD5摘要,生成32位十六进制字符串(常用于密码加密存储)
database()显示当前正在使用的数据库
password()MySQL用于对用户密码进行加密的函数(生成41位加密字符串,仅用于用户认证)
ifnull(val1, val2)判断val1是否为null:若val1为null,返回val2;否则返回val1的值

其它函数示例

  1. 查询当前用户:
select user();
-- 结果:| user()          |
--       | root@localhost  |(根据实际登录用户和主机变化)
  1. MD5摘要加密:
select md5('admin');
-- 结果:| md5('admin')                          |
--       | 21232f297a57a5a743894a0e4a801fc3     |
  1. 显示当前使用的数据库:
select database();
-- 结果:| database() |
--       | test       |(根据实际使用的数据库变化)
  1. 用户密码加密:
select password('root');
-- 结果:| password('root')                          |
--       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
  1. 处理null值:
-- val1不为null,返回val1
select ifnull('abc', '123');
-- 结果:abc-- val1为null,返回val2
select ifnull(null, '123');
-- 结果:123#tips:ifnull需要与select搭配使用 
#eg.select ifnull(...,null) as 别名;这在Oj中经常出现
http://www.dtcms.com/a/528247.html

相关文章:

  • MkFont,一款开源免费的字体设计工具
  • 怎么样才能搜索到自己做的网站jquery做的装修网站
  • 基于Chrome140的TK账号自动化——脚本撰写(二)
  • WPF之Style
  • zabbix实现监控Apache、Nginx、php-fpm应用的实操保姆级流程
  • 69.力扣LeetCode_x的平方根
  • linux第二次作业
  • (二)Gradle 依赖仓库及安全凭证配置
  • 医疗信创标杆实践:浙人医 LIS 系统异构多活容灾架构深度解析(附 KingbaseES 实战)
  • 廊坊怎么做网站免费访问国外网站的应用
  • 对网站建设好学吗vps 需刷新几次才能打开网站
  • 百日挑战之单词篇(第三天)
  • 【C++】list 常见使用和模拟实现
  • HTML HTML5基础(2)
  • macOS安装使用Oh My Tmux教程
  • SpringBoot+FFmpeg+ZLMediaKit 实现本地视频推流
  • Mac-终端
  • 中科大分子生物学Ⅲ复习题2025年
  • 关于lvgl-for linxu的dockerfile
  • 做ppt的网站叫什么名字sem和seo是什么职位
  • 临沂网站建设有哪些公司网页制作模板
  • UDP多线程在线咨询
  • 微信小程序原生如何使用画布生成名片
  • Postman介绍和安装,发送带参数的GET请求
  • 海西州wap网站建设公司网站布局怎么用dw做
  • Python入门经典题目
  • 佛山网站建设乐云seo在线制作wordpress媒体库略缩图
  • 网站的服务器怎么做的网站模板软件
  • Go Web 编程快速入门 07.4 - 模板(4):组合模板与逻辑控制
  • 【Canvas与旗帜】标准加拿大枫叶旗