文章目录
Date数据类型
MySQL使用下列数据类型在数据库中存取日期/时间值
- Date - 格式 YYYY-MM-DD
- DateTime - 格式 YYYY-MM-DD HH:MM:SS
- TimeStamp - 格式 YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
MySQL中最重要的日期函数
函数 | 描述 |
---|---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期或日期/时间表达式的日期部分 |
EXTRACT() | 返回日期/时间按的单独部分 |
DATE_ADD() | 给日期添加指定的时间间隔 |
DATE_SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE_FORMAT() | 用不同的格式显示日期/时间 |
MySQL日期格式化函数: date_format()
作用
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
语法
SELECT DATE_FORMAT(column_name,format) FROM table_name;
date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的日期格式:
格式 | 描述 |
---|---|
%Y | 年,4 位 |
%y | 年,2 位 |
%m | 月,数值(00-12) |
%d | 月的天,数值(00-31) |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
演示数据库
示例
mysql> select create_time as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--日期精确到天-->
mysql> select date_format(create_time,'%Y-%m-%d') as '创建时间' from student;
+------------+
| 创建时间 |
+------------+
| 2020-01-19 |
| NULL |
| NULL |
+------------+
3 rows in set
<--日期精确到小时-->
mysql> select date_format(create_time,'%Y-%m-%d %H') as '创建时间' from student;
+---------------+
| 创建时间 |
+---------------+
| 2020-01-19 22 |
| NULL |
| NULL |
+---------------+
3 rows in set
<--日期精确到分钟-->
mysql> select date_format(create_time,'%Y-%m-%d %H:%i') as '创建时间' from student;
+------------------+
| 创建时间 |
+------------------+
| 2020-01-19 22:39 |
| NULL |
| NULL |
+------------------+
3 rows in set
<--日期精确到秒-->
mysql> select date_format(create_time,'%Y-%m-%d %H:%i:%s') as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
MySQL日期减法函数 date_sub()
作用
DATE_SUB() 函数用于从某日期减去指定的时间间隔后的日期/时间。
语法
DATE_SUB(date,INTERVAL expr unit)
参数说明:
- date 参数是日期或column_name日期列名。
- expr 参数是指定的时间间隔,是一个数值,可以为正负值。
- unit 参数是单位,unit值为DAY,即单位为天。
unit参数可以是以下类型:(大小写均可)
Unit 值 | 描述 |
---|---|
MICROSECOND | 微秒 |
SECOND | 秒 |
MINUTE | 分 |
HOUR | 小时 |
DAY | 天 |
WEEK | 星期 |
MONTH | 月 |
QUARTER | 季 |
YEAR | 年 |
SECOND_MICROSECOND | |
MINUTE_MICROSECOND | |
MINUTE_SECOND | |
HOUR_MICROSECOND | |
HOUR_SECOND | |
HOUR_MINUTE | |
DAY_MICROSECOND | |
DAY_SECOND | |
DAY_MINUTE | |
DAY_HOUR | |
YEAR_MONTH |
演示数据库
示例
mysql> select create_time as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--四天前的日期-->
mysql> select date_sub(create_time,INTERVAL 4 DAY) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-15 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--22小时前的日期-->
mysql> select date_sub(create_time,INTERVAL 22 HOUR) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 00:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--39分钟前的日期-->
mysql> select date_sub(create_time,INTERVAL 39 MINUTE) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:00:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--52秒前的日期-->
mysql> select date_sub(create_time,INTERVAL 52 SECOND) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:00 |
| NULL |
| NULL |
+---------------------+
3 rows in set
MySQL日期加法函数 date_add()
作用
DATE_ADD() 函数用于从某日期加上指定时间间隔后的日期/时间。
语法
DATE_ADD(date,INTERVAL expr unit)
参数说明:
- date 参数是日期或column_name日期列名。
- expr 参数是指定的时间间隔,是一个数值,可以为正负值。
- unit 参数是单位,unit值为DAY,即单位为天。
unit参数可以是以下类型:(大小写均可)
Unit 值 | 描述 |
---|---|
MICROSECOND | 微秒 |
SECOND | 秒 |
MINUTE | 分 |
HOUR | 小时 |
DAY | 天 |
WEEK | 星期 |
MONTH | 月 |
QUARTER | 季 |
YEAR | 年 |
演示数据库
示例
mysql> select create_time as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--6天前的日期-->
mysql> select date_add(create_time,INTERVAL 6 DAY) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-25 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--1小时前的日期-->
mysql> select date_add(create_time,INTERVAL 1 HOUR) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 23:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--11分钟前的日期-->
mysql> select date_add(create_time,INTERVAL 11 MINUTE) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:50:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--3秒前的日期-->
mysql> select date_add(create_time,INTERVAL 3 SECOND) as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:55 |
| NULL |
| NULL |
+---------------------+
3 rows in set
MySQL日期提取函数 date()
作用
DATE() 函数用于从日期上提取或日期/时间表达式中提取日期部分。
语法
DATE(date)
演示数据库
示例
mysql> select create_time as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--提取日期部分-->
mysql> select date(create_time) as '创建时间' from student;
+------------+
| 创建时间 |
+------------+
| 2020-01-19 |
| NULL |
| NULL |
+------------+
3 rows in set
MySQL部分日期/时间提取函数 extract()
作用
EXTRACT() 函数用于从日期/时间中提取单独的部分,比如:年、月、日、时、分、秒。
语法
DATE(unit from date)
演示数据库
示例
mysql> select create_time as '创建时间' from student;
+---------------------+
| 创建时间 |
+---------------------+
| 2020-01-19 22:39:52 |
| NULL |
| NULL |
+---------------------+
3 rows in set
<--提取年份部分-->
mysql> select extract(year from create_time) as '创建时间' from student;
+----------+
| 创建时间 |
+----------+
| 2020 |
| NULL |
| NULL |
+----------+
3 rows in set
<--提取月份部分-->
mysql> select extract(month from create_time) as '创建时间' from student;
+----------+
| 创建时间 |
+----------+
| 1 |
| NULL |
| NULL |
+----------+
3 rows in set
<--提取日数部分-->
mysql> select extract(day from create_time) as '创建时间' from student;
+----------+
| 创建时间 |
+----------+
| 19 |
| NULL |
| NULL |
+----------+
3 rows in set
<--提取小时部分-->
mysql> select extract(hour from create_time) as '创建时间' from student;
+----------+
| 创建时间 |
+----------+
| 22 |
| NULL |
| NULL |
+----------+
3 rows in set
MySQL获取两个日期间隔天数函数 datediff()()
作用
DATEDIFF() 函数用于获取两个日期之间间隔的天数。
语法
DATEDIFF(date1,date2)
演示数据库
示例
mysql> select*from student;
+----------+----------+-----+-----------+---------------------+
| username | password | age | specialty | create_time |
+----------+----------+-----+-----------+---------------------+
| 李四 | 123456 | 20 | 计算机 | 2020-01-19 22:39:52 |
| 王五 | 123456 | 21 | 社会学 | NULL |
| 张三 | 123456 | 18 | 中医学 | NULL |
+----------+----------+-----+-----------+---------------------+
3 rows in set
mysql> select now() as '当前时间';
+---------------------+
| 当前时间 |
+---------------------+
| 2020-01-22 18:22:15 |
+---------------------+
1 row in set
<--获取两个日期之间间隔的天数-->
mysql> select datediff(now(),create_time) as '两个日期之间的天数' from student where username='李四';
+--------------------+
| 两个日期之间的天数 |
+--------------------+
| 3 |
+--------------------+
1 row in set
MySQL基本日期函数函数 now(),curdate(),curtime()
作用
- NOW() 函数用于返回当前的日期和时间。
- CURDATE() 函数用于返回当前的日期。
- CURTIME() 函数用于返回当前的时间。
语法
NOW()
CURDATE()
CURTIME()
示例
mysql> select now() as '当前日期和时间';
+---------------------+
| 当前日期和时间 |
+---------------------+
| 2020-01-22 20:28:38 |
+---------------------+
1 row in set
mysql> select curdate() as '当前日期';
+------------+
| 当前日期 |
+------------+
| 2020-01-22 |
+------------+
1 row in set
mysql> select curtime() as '当前时间';
+----------+
| 当前时间 |
+----------+
| 20:29:15 |
+----------+
1 row in set