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');
相关推荐
李白客3 小时前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence6 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将8 小时前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils1 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波1 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6002 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL2 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_2 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_5 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库