MySQL从零开始 11-日期函数

 数据库特别提供了对有关日期和时间数据的支持,从专门列出的date,datetime,timestamp数据类型就可以看出(对SQL数据类型想深入了解可以参考MySQL的数据类型),除了对时间日期数据类型的支持,SQL还提供了相关的日期函数供我们使用。常用日期函数如下:

常用日期函数

1. current_date()

 current_date()返回当前日期,包括年月日,与date数据类型对应,为了直观的显示出函数的功能,接下来的例子只演示函数直接使用的效果。

mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2018-06-22     |
+----------------+
1 row in set (0.03 sec)

2. current_time()

 current_time()返回当前的时间,包括时分秒,使用如下:

mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 17:08:37       |
+----------------+
1 row in set (0.00 sec)

3. current_timestamp()

 返回当前时间戳,MySQL会直接将时间戳转换为 年月日时分秒的格式,对应了datetime数据类型,使用如下:

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2018-06-22 17:10:15 |
+---------------------+
1 row in set (0.00 sec)

4. date(datetime)

 将一个datetime类型的数据去掉时分秒,只保留年月日部分。

mysql> select date(current_timestamp());
+---------------------------+
| date(current_timestamp()) |
+---------------------------+
| 2018-06-22                |
+---------------------------+
1 row in set (0.03 sec)

5. date_add(date, interval value day_type)

 date_add函数用来给date加上一个一个日期,date必须是一个date类型的年月日,interval为关键字,value为要加的日期值,day_type为日期值的单位,演示如下:

// 计算2018.6.23十天后的日期
mysql> select date_add(current_date, interval 1 day);
+----------------------------------------+
| date_add(current_date, interval 1 day) |
+----------------------------------------+
| 2018-06-23                             |
+----------------------------------------+
1 row in set (0.03 sec)

 注意,这里的添加的天数可以为负值,为负值的含义就是减去value。

6. date_sub(date, interval value day_type)

 date_sub参数含义和使用方法与date_add一样,但是是给指定日期减伤value天,同理,value也可以为负值,为负值就是加上该天数。

7. datediff(date1, date2)

 datediff函数试计算date1与date2之间的日期差,返回结果的单位为天,使用如下:

mysql> select datediff(current_date(), '2015-9-16');
+---------------------------------------+
| datediff(current_date(), '2015-9-16') |
+---------------------------------------+
|                                  1010 |
+---------------------------------------+
1 row in set (0.00 sec)

 注意,这里返回的是date1减去date2的天数。要是date2比date1大,返回的是一个负数。

8. now()

 顾名思义,now()函数返回当前年月日时分秒,与datetime类型对应,使用如下:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2018-06-22 17:25:33 |
+---------------------+
1 row in set (0.00 sec)

 这就是SQL常用的日期函数,下面我们看一个简单的例子:

-- 创建一张生日表,并且插入今天作为生日数据

mysql> create database test;
Query OK, 1 row affected (0.05 sec)

mysql> use test;
Database changed
mysql> create table t1(id int primary key auto_increment, birthday date);
Query OK, 0 rows affected (0.98 sec)

mysql> insert into t1(birthday) values(current_date());
Query OK, 1 row affected (0.17 sec)

mysql> select * from t1;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2018-06-22 |
+----+------------+
1 row in set (0.00 sec)

 接下来,我们看一个稍微复杂的例子:

-- 创建一张表示留言板的表
create table msg(
  id int primary key auto_increment comment '用户id',
  content varchar(30) not null comment '留言内容',
  sendtime datetime comment '留言时间'
);
Query OK, 0 rows affected (0.78 sec)

-- 插入两条测试数据
mysql> insert into msg(content, sendtime) values('i am a', now()), ('i am b', '2018-1-1 0:0:0');
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from msg;
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  1 | i am a  | 2018-06-22 17:42:05 |
|  2 | i am b  | 2018-01-01 00:00:00 |
+----+---------+---------------------+
2 rows in set (0.00 sec)

-- 查找十分钟之内发帖的用户
mysql> select * from msg where date_add(sendtime, interval 10 minute) < now();
+----+---------+---------------------+
| id | content | sendtime            |
+----+---------+---------------------+
|  2 | i am b  | 2018-01-01 00:00:00 |
+----+---------+---------------------+
1 row in set (0.03 sec)

 上面的函数理解起来都很简单,但是大家不要抱着SQL也就不过如此的态度来学习,因为数据库真正的难点是在与各种各样的语句组合使用,那样才能发挥出这些语句的为例。在之后的章节里,可能随便一条查询语句都是两三行起步,所以在这之前,打好基础是非常重要的。

猜你喜欢

转载自blog.csdn.net/weixin_40739833/article/details/80778391
今日推荐