MYSQL内置函数
各期链接
- MYSQL使用(1)
- MYSQL约束(2)
- MYSQL基本查询(3)
- MYSQL内置函数(4)
- MySQL复合查询(5)
日期函数
总表
函数名 | 函数介绍 |
---|
current_date() | 获取当前的日期 |
current_time() | 获取当前的时间 |
now() | 获取当前的日期与时间 |
date_add(date,interval value type) | 在date日期中增加日期或时间 type可以是year(年),day(日),minute(分),second(秒) |
date_sub(date,interval value type) | zaidate日期中减少日期或时间,type同上 |
date(datetime) | 只显示datetime的日期部分 |
datediff(datetime1,datetime2) | 获取两个日期的差值,单位为天 |
演示
current_date()
mysql> select current_date();
+
| current_date() |
+
| 2024-07-16 |
+
1 row in set (0.00 sec)
current_time()
mysql> select current_time();
+
| current_time() |
+
| 09:09:20 |
+
1 row in set (0.00 sec)
now()
mysql> select now();
+
| now() |
+
| 2024-07-16 09:11:46 |
+
1 row in set (0.00 sec)
date_add()
mysql> select date_add('1949-10-1',interval 100 year);
+
| date_add('1949-10-1',interval 100 year) |
+
| 2049-10-01 |
+
1 row in set (0.00 sec)
date_sub()
mysql> select date_sub('2024-1-1 8:00:00',interval 10 minute);
+
| date_sub('2024-1-1 8:00:00',interval 10 minute) |
+
| 2024-01-01 07:50:00 |
+
1 row in set (0.00 sec)
date()
mysql> select date('2024-1-1 8:00:00');
+
| date('2024-1-1 8:00:00') |
+
| 2024-01-01 |
+
1 row in set (0.00 sec)
datediff()
mysql> select datediff('1949-10-1','1921-7-1');
+
| datediff('1949-10-1','1921-7-1') |
+
| 10319 |
+
1 row in set (0.01 sec)
案例
create table msg(
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
insert into msg (content,sendtime)values('张三,你好',now());
insert into msg (content,sendtime)values('李四,你好',now());
select * from msg where date_add(sendtime,interval 2 minute) > now();
select now();
select * from msg where date_add(sendtime,interval 2 minute) > now();
insert into msg (content,sendtime) values ('王五,你好',now());
select * from msg where date_add(sendtime,interval 2 minute) > now();
mysql> -- 创建表结构
mysql> create table msg(
-> id int primary key auto_increment,
-> content varchar(30) not null,
-> sendtime datetime
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> -- 插入数据
mysql> insert into msg (content,sendtime)values('张三,你好',now());
Query OK, 1 row affected (0.02 sec)
mysql> insert into msg (content,sendtime)values('李四,你好',now());
Query OK, 1 row affected (0.00 sec)
mysql> -- 查看2分钟内的表内容
mysql> select * from msg where date_add(sendtime,interval 2 minute) > now();
+----+---------------+---------------------+
| id | content | sendtime |
+----+---------------+---------------------+
| 1 | 张三,你好 | 2024-07-16 09:35:44 |
| 2 | 李四,你好 | 2024-07-16 09:35:44 |
+----+---------------+---------------------+
2 rows in set (0.01 sec)
mysql> -- 两分钟再查看表内容
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2024-07-16 09:45:02 |
+---------------------+
1 row in set (0.00 sec)
mysql> select * from msg where date_add(sendtime,interval 2 minute) > now();
Empty set (0.00 sec)
-- 新插入后查看
mysql> insert into msg (content,sendtime) values ('王五,你好',now());
Query OK, 1 row affected (0.01 sec)
mysql> select * from msg where date_add(sendtime,interval 2 minute) > now();
+----+-----------------+---------------------+
| id | content | sendtime |
+----+-----------------+---------------------+
| 3 | 王五,你好 | 2024-07-16 09:46:18 |
+----+-----------------+---------------------+
1 row in set (0.00 sec)
字符串函数
总表
函数 | 函数介绍 |
---|
charset(str) | 返回字符串使用的字符集 |
concat(str[, …]) | 返回连接字符串 |
instr(string,substring) | 返回substring在string中出现的位置,不存在返回0 |
ucase(string) | 转换为大写 |
lcase(string) | 转换为小写 |
left(string,length) | 从左起取length个字符 |
length(string) | 返回字符串的长度 |
replace(str,search_str,replace_str) | 将str的serach_str替换为replace_str |
strcmp(str1,str2) | 逐字符比较两个字符串的大小 |
substring(string,position[,length]) | string字符串从position位置开始,截取length个字符(下标从一开始,默认length取剩余全部) |
ltrim(str) ,rtrim(str),trim(str) | 去除左边空格/右边空格/俩边空格 |
示例
select charset(emp.ename) from emp;
mysql> -- 查看emp表中的ename字符串用的字符集
mysql> select charset(emp.ename) from emp;
+--------------------+
| charset(emp.ename) |
+--------------------+
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
| utf8 |
+--------------------+
14 rows in set (0.01 sec)
select id,content,concat('发言时间北京时间:',sendtime) from msg;
mysql> -- 将两段字符拼接
mysql> select id,content,concat('发言时间北京时间:',sendtime) from msg;
+----+-----------------+----------------------------------------------+
| id | content | concat('发言时间北京时间:',sendtime) |
+----+-----------------+----------------------------------------------+
| 1 | 张三,你好 | 发言时间北京时间:2024-07-16 09:35:44 |
| 2 | 李四,你好 | 发言时间北京时间:2024-07-16 09:35:44 |
| 3 | 王五,你好 | 发言时间北京时间:2024-07-16 09:46:18 |
+----+-----------------+----------------------------------------------+
3 rows in set (0.01 sec)
数学函数
总表
函数 | 函数介绍 |
---|
abs(number) | 求平均数 |
bin(decimal_number) | 十进制转为二进制 |
hex(decimal_number) | 十进制转为十六进制 |
conv(number,from_base,to_base) | 进制转换 |
ceiling(number) | 向上取整 |
floor(number) | 向下取整 |
format(number,decimal_places) | 格式化,保留几位小数 |
rand() | 返回随机浮点数,范围[0.0,1.0) |
mod(number,denominate) | 取余,求模 |
示例
mysql> select concat('绝对值:',abs(-10.1));
+
| concat('绝对值:',abs(-10.1)) |
+
| 绝对值:10.1 |
+
1 row in set (0.00 sec)
mysql> select concat('十进制转二进制:',bin(4));
+
| concat('十进制转二进制:',bin(4)) |
+
| 十进制转二进制:100 |
+
1 row in set (0.00 sec)
mysql> select concat('十进制转十六进制:',hex(16));
+
| concat('十进制转十六进制:',hex(16)) |
+
| 十进制转十六进制:10 |
+
1 row in set (0.00 sec)
mysql> select concat('进制转换:',conv(16,10,16));
+
| concat('进制转换:',conv(16,10,16)) |
+
| 进制转换:10 |
+
1 row in set (0.00 sec)
mysql> select concat('向上取整:',ceiling(20.4));
+
| concat('向上取整:',ceiling(20.4)) |
+
| 向上取整:21 |
+
1 row in set (0.00 sec)
mysql> select concat('向下取整:',floor(20.8));
+
| concat('向下取整:',floor(20.8)) |
+
| 向下取整:20 |
+
1 row in set (0.00 sec)
mysql> select concat(':',format(12.12341,2));
+
| concat(':',format(12.12341,2)) |
+
| :12.12 |
+
1 row in set (0.00 sec)
mysql> select concat('取余,求模:',mod(101,2));
+
| concat('取余,求模:',mod(101,2)) |
+
| 取余,求模:1 |
+
1 row in set (0.00 sec)
其他函数
总表
函数 | 函数介绍 |
---|
user() | 获取当前用户 |
md5(string) | 进行md5摘要,摘要后获得32位的字符串 |
database() | 获取当前使用的数据库 |
password(string) | 对密码进行加密 |
ifnull(value1,value2) | 如果value1为null返回value2,否则返回value1 |
mysql> select user();
+
| user() |
+
| root@ |
+
1 row in set (0.00 sec)
mysql> select md5('12345678');
+
| md5('12345678') |
+
| 25d55ad283aa400af464c76d713c07ad |
+
1 row in set (0.00 sec)
mysql> select database();
+
| database() |
+
| text1 |
+
1 row in set (0.00 sec)
mysql> select password('123456a');
+
| password('123456a') |
+
| *B012E8731FF1DF44F3D8B26837708985278C3CED |
+
1 row in set, 1 warning (0.00 sec)
mysql> select ifnull(1,2);
+
| ifnull(1,2) |
+
| 1 |
+
1 row in set (0.00 sec)
mysql> select ifnull(0,2);
+
| ifnull(0,2) |
+
| 0 |
+
1 row in set (0.00 sec)
mysql> select ifnull(null,2);
+
| ifnull(null,2) |
+
| 2 |
+
1 row in set (0.00 sec)