MYSQL内置函数(4)

MYSQL内置函数

各期链接

  1. MYSQL使用(1)
  2. MYSQL约束(2)
  3. MYSQL基本查询(3)
  4. MYSQL内置函数(4)
  5. 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());
-- 查看2分钟内的表内容
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)去除左边空格/右边空格/俩边空格

示例

-- 查看emp表中的ename字符串用的字符集
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值