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');
