MySQL的内置函数

1:日期函数

函数名称 功能描述
current_date() 获取当前日期
current_time() 获取当前时间
current_timestamp() 获取当前时间戳(日期 + 时间)
date(datetime) 提取 datetime 的日期部分
date_add (date, interval 数值 单位) 日期 / 时间加法
date_sub (date, interval 数值 单位) 日期 / 时间减法
datediff(date1, date2) 计算两个日期的天数差
now() 获取当前日期 + 时间

实验表

生日表tmp

sql 复制代码
-- 功能:存储用户ID与生日
CREATE TABLE tmp (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    birthday DATE  -- 生日(纯日期类型)
);

留言表

sql 复制代码
SELECT CURRENT_DATE();
sql 复制代码
-- 功能:存储留言内容、发布时间
CREATE TABLE msg (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    content VARCHAR(30) NOT NULL,       -- 留言内容(非空)
    sendtime DATETIME                   -- 发布时间(日期+时间)
);

1:获取当前日期

sql 复制代码
SELECT CURRENT_DATE();

2:获取当前时间

sql 复制代码
SELECT CURRENT_TIME();

3:日期加法

sql 复制代码
SELECT DATE_ADD('2017-10-28', INTERVAL 10 DAY);

4:日期减法

sql 复制代码
SELECT DATE_SUB('2017-10-01', INTERVAL 2 DAY);

5:计算日期天数差

sql 复制代码
SELECT DATEDIFF('2017-10-10', '2016-09-01');

6:插入当前日期到生日表

sql 复制代码
INSERT INTO tmp(birthday) VALUES (CURRENT_DATE());
SELECT * FROM tmp;

7:插入留言并查询2分钟内发布的内容

sql 复制代码
-- 插入测试数据
INSERT INTO msg(content,sendtime) VALUES('hello1', NOW()),('hello2', NOW());
-- 只显示日期(隐藏时间)
SELECT content, DATE(sendtime) FROM msg;
-- 查询2分钟内发布的帖子
SELECT * FROM msg WHERE DATE_ADD(sendtime, INTERVAL 2 MINUTE) > NOW();

2:字符串函数

函数名称 功能描述
charset(str) 返回字符串字符集
concat(s1,s2...) 拼接多个字符串
instr(str,sub) 子串首次出现位置(无则 0)
ucase/ucase 转大写 / 小写
left(str,len) 左侧截取指定长度
length(str) 字符串字节长度
replace(str,old,new) 字符串替换
substring(str,pos,len) 按位置截取字符串
trim/ltrim/rtrim 去除两侧 / 左 / 右空格

表结构

sql 复制代码
-- 功能:存储学生姓名、各科分数
CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    chinese INT,
    math INT,
    english INT
);
-- 插入测试数据
INSERT INTO student(name,chinese,math,english) 
VALUES('张三',90,85,95),('李四',88,92,80);
sql 复制代码
-- 功能:存储员工姓名
CREATE TABLE emp (
    id INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20) NOT NULL
);
-- 插入测试数据
INSERT INTO emp(ename) VALUES('SMITH'),('ALLEN'),('WARD');

1:查询员工姓名字符集

sql 复制代码
SELECT CHARSET(ename) FROM emp;

2:拼接学生成绩信息

sql 复制代码
SELECT CONCAT(name, '的语文是',chinese,'分,数学是',math,'分') AS '分数' FROM student;

3:计算姓名字节长度

sql 复制代码
SELECT LENGTH(name), name FROM student;

4:替换姓名中的字符

sql 复制代码
SELECT REPLACE(ename, 'S', '上海'), ename FROM emp;

5:截取姓名第2-3个字符

sql 复制代码
SELECT SUBSTRING(ename, 2, 2), ename FROM emp;

6:姓名首字母小写

sql 复制代码
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2)) FROM emp;

3:数学函数

函数名称 功能描述
abs(num) 求绝对值
ceiling(num) 向上取整
floor(num) 向下取整
format(num,n) 保留 n 位小数(四舍五入)
rand() 生成 0~1 随机浮点数
mod(num,den) 取模 / 求余
conv(num,from,to) 进制转换

1:绝对值计算

sql 复制代码
SELECT ABS(-100.2);

2:向上/向下取整

sql 复制代码
SELECT CEILING(23.04), FLOOR(23.7);

3:保留2位小数

sql 复制代码
SELECT FORMAT(12.3456, 2);

4:生成随机数

sql 复制代码
SELECT RAND();

4:其他常用函数

函数名称 功能描述
user() 查询当前 MySQL 用户
database() 查询当前使用的数据库
md5(str) 字符串 MD5 加密(32 位)
password(str) MySQL 用户密码加密
ifnull(val1,val2) 空值替换(val1 为 null 返回 val2)

1:查询当前用户/数据库

sql 复制代码
SELECT USER(), DATABASE();

2:MD5加密

sql 复制代码
SELECT MD5('admin');

3

3:空值判断

sql 复制代码
SELECT IFNULL('abc', '123'), IFNULL(NULL, '123');
相关推荐
JJJennie7773 小时前
MAI Gateway实战部署:大模型网关部署方案?从0到1上手指南
数据库·人工智能·gateway·ai网关
吹什么轩3 小时前
MySQL 内连接与外连接:从笛卡尔积到 LEFT JOIN,一篇讲透
数据库·mysql
涛思数据(TDengine)3 小时前
支撑药企全球化合规:TDengine 发布中美欧三地监管对照白皮书
大数据·数据库·人工智能·ai·tdengine
李兆龙的博客3 小时前
从一到无穷大 #106:Nimble 文件格式——超宽表的元数据、编码与索引设计
数据库·存储·parquet
boy快快长大3 小时前
MySQL 转 PostgreSQL 使用指南
数据库·mysql·postgresql
晴天¥3 小时前
Oracle集群中是该如何管理控制文件和日志文件组?
数据库·oracle
NineData3 小时前
NineData 社区版 V5.4.0 上线:715 条复制对比链路,AI Agent 新增表结构设计发布能力
大数据·数据库·人工智能·mysql·数据库管理工具·ninedata·数据库迁移工具
云策数链3 小时前
用友 T+Cloud / U8 项目交接时的账套健康度核查清单
数据库·oracle·erp·用友·云策数链
Tt有了t3 小时前
Redis的数据结构
数据结构·数据库·redis
ss2733 小时前
PostgreSQL咨询锁的使用
数据库·postgresql