MySQL白菜教程(Level 4)
时间函数
-
使用 NOW() 、 CURDATE()、CURTIME() 获取当前时间
在 SQL 中,我们可以通过使用NOW()
、CURDATE()
、CURTIME()
来获取当前的时间
NOW()
可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss
CURDATE()
可以用来返回当前日期 格式:YYYY-MM-DD
CURTIME()
可以用来返回当前时间 格式:hh:mm:ss
在使用
NOW()
和CURTIME()
时,如果要精确的秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位
比如NOW(3)
就是精确到毫秒,表示为:2021-03-31 15:27:20.645
语法:
select now() | curdate() | curtime();
实例如下:
mysql> select now() as now, curdate() as nowDate, curtime(3) as nowTime;
+---------------------+------------+--------------+
| now | nowDate | nowTime |
+---------------------+------------+--------------+
| 2021-08-16 10:16:46 | 2021-08-16 | 10:16:46.624 |
+---------------------+------------+--------------+
1 row in set (0.01 sec)
-
使用 DATE()、TIME() 函数提取日期和时间
将时间中的代表日期的元素和代表时间的元素从时间中提取出来
语法:
select date(`data`) | time(`data`) ;
实例如下:
mysql> select date('2020-08-16 10:16:46') as date, time('2021-08-16 11:16:46') as time;
+------------+----------+
| date | time |
+------------+----------+
| 2020-08-16 | 11:16:46 |
+------------+----------+
1 row in set (0.00 sec)
-
使用 EXTRACT() 函数提取指定的时间信息
EXTRACT() 函数用于返回日期/时间的单独部分,如YEAR
(年)、MONTH
(月)、DAY
(日)、HOUR
(小时)、MINUTE
(分钟)、SECOND
(秒)
语法:
select extract(unit from date) from table ;
其中:
table
是表格名
date
参数是合法的日期表达式。
unit
参数是需要返回的时间部分,如 YEAR
、MONTH
、DAY
、 HOUR
、MINUTE
、SECOND
等
在一般情况下,EXTRACT(unit FROM date) 与 unit() 的结果相同
实例如下:
mysql> select extract(hour from '2020-08-16 10:16:46');
+------------------------------------------+
| extract(hour from '2020-08-16 10:16:46') |
+------------------------------------------+
| 10 |
+------------------------------------------+
1 row in set (0.01 sec)
-
使用 DATE_FORMAT() 格式化输出日期
SQL 中使用DATE_FORMAT()
方法来格式化输出 date/time
需要注意的是DATE_FORMAT()
函数返回的是字符串格式
语法:
select date_format(date, format) ;
其中
date
一个有效日期
format
是 date/time 的输出格式
输出格式 | 表示含义 |
---|---|
%Y | 表示年的全称(2000-08-16) |
%y | 表示年的后两位 (00) |
%M | 表示月的英式表达 (August) |
%m | 表示月 (08) |
%D | 表示日的英式表达 (16th) |
%d | 表示日 (16) |
%H or %h | 表示小时 |
%i | 表示分钟 |
%S or %s | 表示秒 |
%W | 表示周几的英式表达 |
%w | 表示周几数字 |
实例如下
mysql> select date_format('2000-08-16 10:16:46', '%Y-%m-%d %h:%i:%s') as date, date_format('2000-08-16 10:16:46', '%W %w') as week;
+---------------------+-------------+
| date | week |
+---------------------+-------------+
| 2000-08-16 10:16:46 | Wednesday 3 |
+---------------------+-------------+
1 row in set (0.00 sec)
-
使用 DATE_ADD() 增加时间
DATE_ADD()
函数是常用的时间函数之一,用于向日期添加指定的时间间隔
语法:
select date_add(date, INTERVAL expr type) from table_name ;
其中:
date
指代希望被操作的有效日期,为起始日期
expr
是希望添加的时间间隔的数值(expr 是一个字符串,对于负值的间隔,可以以 ”-“ 开头)
type
是具体的数据类型,表示加上时间间隔的单位(可以是 MICROSECOND , SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR 等)
实例如下
mysql> select date_add('2000-08-16 10:16:46', interval 1 year) as changeDate;
+---------------------+
| changeDate |
+---------------------+
| 2001-08-16 10:16:46 |
+---------------------+
1 row in set (0.00 sec)
-
使用 DATE_SUB() 减少时间
DATE_SUB()
函数是常用的时间函数之一,用于从日期减去指定的时间间隔。它与DATE_ADD()
函数具有相似的用法
语法:
select date_sub(date, INTERVAL expr type) from table_name ;
其中:
date
指代希望被操作的有效日期,为起始日期
expr
是希望添加的时间间隔的数值(expr 是一个字符串,对于负值的间隔,可以以 ”-“ 开头)
type
是具体的数据类型,表示加上时间间隔的单位(可以是 MICROSECOND , SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR 等)
实例如下
mysql> select date_add('2000-08-16 10:16:46', interval 1 year) as changeDate;
+---------------------+
| changeDate |
+---------------------+
| 2019-08-16 10:16:46 |
+---------------------+
1 row in set (0.00 sec)
- ** 使用时间函数 DATEDIFF() 和 TIMESTAMPDIFF() 计算日期差**
DATEDIFF ()
DATEDIFF()
常用的日期差,在 MySQL 中默认只能计算天数差
语法:
DATEDIFF(时间1, 时间2):差值计算规则:时间 1 - 时间 2
select datediff(时间1, 时间2) from table_name;
TIMESTAMPDIFF()
语法:
TIMESTAMPDIFF(type, 时间1, 时间2):差值计算规则:时间 2 - 时间 1
type: YEAR(年差)、MONTH(月差)、DAY(天差)、WEEK(周差)、HOUR(时差)
select datestampdiff(type, 时间1, 时间2);