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');
相关推荐
熏鱼的小迷弟Liu1 小时前
【MySQL】MySQL中的MVCC是什么?它与隔离级别有什么关系?
mysql·mvcc
Mike117.1 小时前
GBase 8a 慢任务处理时 KILL 和 PROCESSLIST 的使用边界
大数据·数据库
sun03221 小时前
介绍一下 Oracle中的 ROWNUM 和 ROW_NUMBER OVER
数据库·oracle
六月雨滴1 小时前
Oracle 数据库实例启动与关闭
数据库·oracle·dba
NineData1 小时前
还在轮询 MySQL 吗?用 NineData 把业务变更直接送进 Kafka
数据库·mysql·kafka·ninedata·数据复制·玖章算术·数据迁移工具
gQ85v10Db1 小时前
Redis分布式锁进阶第三十二篇
数据库·redis·分布式
wmm_会飞的@鱼2 小时前
FlexSim-基于SLP方法的A汽车企业总装车间布局优化
前端·数据结构·数据库·python·数学建模·汽车
北秋,2 小时前
Web Security Academy 第三关:SQL 注入查询 Oracle 数据库版本
数据库·sql·oracle
whn19772 小时前
继续,在centos10上安装pg
数据库