程序员需掌握的SQL时间函数(五)

前言

日期和时间函数是用来处理日期和时间函数,一般开发中我们总会遇到这样的需求:截止到当前时间订单的数量之和等等,下面将详细介绍各种日期和时间函数,下面列出了MySQL中常用的日期和时间函数。

1. 获取当前日期的函数和获取当前时间的函数

获取当前日期有CURRENT_DATE() 或CURDATE(),两者的作用相同,都是获取当前的日期,输出将按照‘YYYY-MM-DD’格式进行输出

mysql> select CURRENT_DATE(),CURDATE();
+----------------+------------+
| CURRENT_DATE() | CURDATE()  |
+----------------+------------+
| 2020-06-24     | 2020-06-24 |
+----------------+------------+
1 row in set (0.00 sec)

获取当前时间可以使用CURRENT_TIME 和CURTIME(),两者的作用也是相同的,输出时间的格式将按照’HH:MM:SS’

mysql> select CURRENT_TIME(),CURTIME();
+----------------+-----------+
| CURRENT_TIME() | CURTIME() |
+----------------+-----------+
| 13:48:47       | 13:48:47  |
+----------------+-----------+
1 row in set (0.00 sec)

2. 获取当前日期时间

在开发中经常有需要获取当前时间进行数值插入,例如:当生成订单时需要保存下单时间,CURRRENT_TIMESTAMP()、NOW()、LOCALTIME()、SYSDATE() 都可以当前获取日期,且四个函数作用是一样的

mysql> select NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| NOW()               | CURRENT_TIMESTAMP() | LOCALTIME()         | SYSDATE()           |
+---------------------+---------------------+---------------------+---------------------+
| 2020-06-25 00:11:09 | 2020-06-25 00:11:09 | 2020-06-25 00:11:09 | 2020-06-25 00:11:09 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)

3. UNIX时间转换

UNIX_TIMESTAMP(date)函数:返回日期date的unix时间戳,而FROM_UNIXTIME(unixtime) 正好相反是将unix时间戳改为date类型

mysql> select UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
|            1593015381 |
+-----------------------+
1 row in set (0.00 sec)


mysql> SELECT FROM_UNIXTIME(1593015381);
+---------------------------+
| FROM_UNIXTIME(1593015381) |
+---------------------------+
| 2020-06-25 00:16:21       |
+---------------------------+
1 row in set (0.00 sec)

4. 月份函数

MONTH(date) 返回date所在的月份,返回的值从1-12而MONTHNAME(date) 返回date所对应月份的英文名

mysql> SELECT MONTH(NOW()),MONTHNAME(NOW());
+--------------+------------------+
| MONTH(NOW()) | MONTHNAME(NOW()) |
+--------------+------------------+
|            6 | June             |
+--------------+------------------+
1 row in set (0.00 sec)

5. 天数函数

DAYNAME(date) 返回date对应的工作日名称,DAYOFWEEK(date) 返回指定日期的周索引,索引从0开始直到6

mysql> select DAYNAME(NOW()),DAYOFWEEK(NOW());
+----------------+------------------+
| DAYNAME(NOW()) | DAYOFWEEK(NOW()) |
+----------------+------------------+
| Thursday       |                5 |
+----------------+------------------+
1 row in set (0.00 sec)

DAYOFYEAR(date) 返回的是一年中的第几天,范围是1-366,DAYOFMONTH(date)返回的是月中的第几天

mysql> SELECT DAYOFMONTH(NOW()),DAYOFYEAR(NOW());
+-------------------+------------------+
| DAYOFMONTH(NOW()) | DAYOFYEAR(NOW()) |
+-------------------+------------------+
|                25 |              177 |
+-------------------+------------------+
1 row in set (0.00 sec)

6. 年、月、周、日、时、分、秒函数

mysql> select YEAR(NOW()),MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
+-------------+--------------+------------+-------------+---------------+---------------+
| YEAR(NOW()) | MONTH(NOW()) | DAY(NOW()) | HOUR(NOW()) | MINUTE(NOW()) | SECOND(NOW()) |
+-------------+--------------+------------+-------------+---------------+---------------+
|        2020 |            6 |         25 |           0 |            42 |            55 |
+-------------+--------------+------------+-------------+---------------+---------------+
1 row in set (0.00 sec)

7. 计算日期和时间函数

在开发中经常有时间计算的需求例如查询3小时前生成的订单数量等,常见使用函数有DATE_ADD()、DATE_SUB()、DATE_DIFF(),其中前都是两者计算时间间 DATE_ADD() 执行加法运算,而DATE_SUB()执行减法运算。而DATE_DIFF()计算相隔的天数。

mysql> SELECT DATE_ADD(NOW(), INTERVAL -3 HOUR),DATE_SUB(NOW(),INTERVAL 3 HOUR);
+-----------------------------------+---------------------------------+
| DATE_ADD(NOW(), INTERVAL -3 HOUR) | DATE_SUB(NOW(),INTERVAL 3 HOUR) |
+-----------------------------------+---------------------------------+
| 2020-06-24 21:58:52               | 2020-06-24 21:58:52             |
+-----------------------------------+---------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATEDIFF(now(),'2020-06-20');
+------------------------------+
| DATEDIFF(now(),'2020-06-20') |
+------------------------------+
|                            5 |
+------------------------------+
1 row in set (0.00 sec)

上面时间计算是以HOUR为单位进行计算的,除此之外还可以使用YEAR、MONTH、DAY、HOUR、MINUTE、SECOND等。

8 时间格式化

开发中最常见的格式化函数是DATE_FORMAT(date,pattern)。例如把时间格式化为我们日常所见的函数格式如下所示:

mysql> select date_format(now(),'%Y-%m-%d %H:%i:%s');
+----------------------------------------+
| date_format(now(),'%Y-%m-%d %H:%i:%s') |
+----------------------------------------+
| 2020-06-25 01:19:42                    |
+----------------------------------------+
1 row in set (0.00 sec)

关于更多的正则部分规则可参考这个网址: https://www.w3school.com.cn/sql/func_date_format.asp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章