MySQL内置函数

1. 日期函数

1.1 常用日期函数概览

函数 描述
current_date() 当前日期
current_time() 当前时间
current_timestamp() 当前日期和时间
date(datetime) 返回日期部分
date_add(date, INTERVAL expr unit) 日期加法
date_sub(date, INTERVAL expr unit) 日期减法
datediff(date1, date2) 日期差(天)
now() 当前日期时间

1.2 示例补充

sql 复制代码
-- 当前日期
SELECT current_date();

-- 当前时间
SELECT current_time();

-- 当前时间戳
SELECT current_timestamp();

-- 日期加法
SELECT date_add('2025-03-19', INTERVAL 10 DAY);

-- 日期减法
SELECT date_sub('2025-03-19', INTERVAL 5 DAY);

-- 日期差
SELECT datediff('2025-03-25', '2025-03-19');

-- 当前日期时间
SELECT now();

1.3 应用案例

案例1:记录生日表

sql 复制代码
CREATE TABLE birthday_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    birthday DATE
);

insert into tmp(birthday) values(current_date());

案例2:留言表,查询2分钟内发布的帖子

sql 复制代码
CREATE TABLE message (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(255),
    sendtime DATETIME
);

INSERT INTO message (content, sendtime) VALUES ('hello', now());

SELECT * FROM message 
WHERE sendtime > NOW() - INTERVAL 2 MINUTE;

2. 字符串函数

2.1 常用字符串函数

函数 描述
charset(str) 返回字符集
concat(str1, str2, ...) 拼接字符串
length(str) 返回字节数
replace(str, from, to) 替换字符串
substring(str, pos, len) 截取子串
lcase(str) / lower(str) 转小写
ucase(str) / upper(str) 转大写
sql 复制代码
-- 查看字符集
SELECT charset(ename) FROM EMP;

-- 格式化输出
SELECT concat(name, '的语文是', chinese, '分,数学是', math, '分') AS 成绩 FROM exam_result;

-- 字节数(中文字符占多个字节)
SELECT length(name), name FROM student;

-- 替换
SELECT replace(ename, 'S', '上海') FROM EMP;

-- 截取
SELECT substring(ename, 2, 2) FROM EMP;

-- 首字母小写
SELECT concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) FROM EMP;

3. 数学函数

3.1 常用数学函数

函数 描述
abs(x) 绝对值
bin(x) 十进制转二进制
hex(x) 十进制转十六进制
conv(num, from, to) 进制转换
ceiling(x) 向上取整
floor(x) 向下取整
format(x, d) 格式化小数位数
rand() 随机数 [0,1)
mod(n, m) 取模

3.2 示例补充

sql 复制代码
SELECT abs(-100);
SELECT ceiling(23.01);  -- 24
SELECT floor(23.99);    -- 23
SELECT format(123.4567, 2);  -- 123.46
SELECT rand();
SELECT mod(10, 3);  -- 1

4. 其它函数

4.1 常用函数

函数 描述
user() 当前用户
md5(str) 返回MD5摘要
database() 当前数据库
password(str) 加密(用于用户认证)
ifnull(val1, val2) 如果val1为null,返回val2
sql 复制代码
SELECT user();
SELECT md5('admin');
SELECT database();
SELECT password('root');  -- 注意:MySQL 8.0+ 已弃用
SELECT ifnull(null, '默认值');
SELECT ifnull('非空', '默认值');

5. 实战题补充

查找字符串中逗号出现的次数_牛客题霸_牛客网

sql 复制代码
select id,(length(string) - length(replace(string,',',''))) as cnt from strings;
相关推荐
say_fall2 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
共享家95273 小时前
408 操作系统第一章
服务器·数据库·windows
这个DBA有点耶3 小时前
连拿六年第一后宣布出海:国产数据库凭什么敢撕掉“平替”的标签?
数据库·人工智能·架构
云和恩墨4 小时前
数据库监控简史:从会回答到能交付——AI-DBA如何成为真正的数字同事
数据库·人工智能·dba
paopaokaka_luck4 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶5 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
kingx35 小时前
BugKu 渗透测试 4 实战:文件上传打点,5 Flag 全通
数据库·渗透测试·web·内网渗透
我命由我123456 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
SelectDB6 小时前
Apache Doris 与 SelectDB 是什么关系?从开源技术到面向 Agent 的极速分析数据库
大数据·数据库·数据分析
VimorphTech6 小时前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis