前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql时间和日期处理函数

mysql时间和日期处理函数

作者头像
AsiaYe
发布2019-11-06 16:33:03
7K0
发布2019-11-06 16:33:03
举报
文章被收录于专栏:DBA随笔DBA随笔
mysql时间和日期处理函数

时间和日期函数示例

在日常运维的过程中,经常需要写一些脚本来进行一些清理日表或者日志的操作,在这些脚本中,常常会用到很多关于时间和日期的函数,今天把这些函数简单整理下,后续如果想实现一些脚本,可以直接拿来用。

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

代码语言:javascript
复制
root@localhost:3306 [sys]>select curdate(),current_date(),curdate()+0;
+------------+----------------+-------------+
| curdate()  | current_date() | curdate()+0 |
+------------+----------------+-------------+
| 2019-01-31 | 2019-01-31     |    20190131 |
+------------+----------------+-------------+
1 row in set (0.09 sec)

curdate和current_date函数都是返回当前日期值,格式为YYYY:MM:DD,可以看到curdate值+0返回的是数值格式的值。

想要返回实际的时间HH:MM:SS的格式,需要使用curtime或者current_time格式,如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select curtime(),current_time(),curtime()+0;
+-----------+----------------+-------------+
| curtime() | current_time() | curtime()+0 |
+-----------+----------------+-------------+
| 21:21:53  | 21:21:53       |      212153 |
+-----------+----------------+-------------+
1 row in set (0.00 sec)

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

也就是说,获取时间格式为YYYY:MM:DD HH:MM:SS的格式,年月日十分秒,这种方式我们可以采用下面四个函数来分别获取,如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select current_timestamp(),localtime(),now(),sysdate()
\G
*************************** 1. row ***************************
current_timestamp(): 2019-01-31 21:25:04
        localtime(): 2019-01-31 21:25:04
              now(): 2019-01-31 21:25:04
          sysdate(): 2019-01-31 21:25:04
1 row in set (0.00 sec)

可以看到,current_timestamp、localtime、now和sysdate函数的返回结果完全相同,获取的时间结果是第一种方法获取的两种结果的拼接。

3.UNIX时间戳函数

也就是unix_timestamp(date)格式的函数,如果参数date什么也不写,则会返回一个unix时间戳,也就是'1970-01-01 00:00:00'之后的一个无符号整数,上面的时间戳也称之为格林尼治标准时间,简称GMT,如果使用了date参数,将返回一个参数值距离格林尼治标准时间的无符号整数,看着比较拗口,看看例子:

代码语言:javascript
复制
root@localhost:3306 [sys]>select unix_timestamp(),unix_timestamp(now()),now();
+------------------+-----------------------+---------------------+
| unix_timestamp() | unix_timestamp(now()) | now()               |
+------------------+-----------------------+---------------------+
|       1548941601 |            1548941601 | 2019-01-31 21:33:21 |
+------------------+-----------------------+---------------------+
1 row in set (0.04 sec)

上面函数的反函数是from_unixtime函数,具体使用方法如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select from_unixtime('1548941601');
+-----------------------------+
| from_unixtime('1548941601') |
+-----------------------------+
| 2019-01-31 21:33:21.000000  |
+-----------------------------+
1 row in set (0.04 sec)

4.返回UTC时间和UTC日期的函数

UTC也就是世界标准时间,一般情况下UTC时间和GMT时间可以试做相同,我们北京使用的时间是UTC时间+8小时,示例如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select utc_date(),utc_date()+0,utc_time(),utc_time()+0;
+------------+--------------+------------+--------------+
| utc_date() | utc_date()+0 | utc_time() | utc_time()+0 |
+------------+--------------+------------+--------------+
| 2019-01-31 |     20190131 | 13:37:36   |       133736 |
+------------+--------------+------------+--------------+
1 row in set (0.00 sec)

5.获取月份的时间month(date)和monthname(date())

使用month函数,返回具体时间的月份,使用monthname返回当前月份的英文名称,话不多说,看示例:

代码语言:javascript
复制
root@localhost:3306 [sys]>select month('2019-01-31'),monthname(now());
+---------------------+------------------+
| month('2019-01-31') | monthname(now()) |
+---------------------+------------------+
|                   1 | January          |
+---------------------+------------------+
1 row in set (0.04 sec)

6.获取星期的函数dayname、dayofweek、weekday

这三个函数的含义如下:

dayname:返回当前是星期几

dayofweek:返回的是周索引,星期日是1,星期一是2,星期二是3,星期三是4,以此类推;

weekday:返回工作日索引,星期一是0,星期二是1,星期三是2

代码语言:javascript
复制
root@localhost:3306 [sys]>select dayname(now()),dayofweek(now()),weekday(now());

+----------------+------------------+----------------+
| dayname(now()) | dayofweek(now()) | weekday(now()) |
+----------------+------------------+----------------+
| Thursday       |                5 |              3 |
+----------------+------------------+----------------+
1 row in set (0.00 sec)

7.获取星期数的函数week(date)和weekofyear(date)

其中week函数计算日期date是一年中的第几周,这个函数可以带另外一个mode参数,参数不同,表示数字1代表一周内的哪一天,主要是为了区分各个国家对一个周从哪天开始不一致的情况。先看一张统计表:

代码语言:javascript
复制
root@localhost:3306 [sys]>select week(now()),week(now(),0),week(now(),1);
+-------------+---------------+---------------+
| week(now()) | week(now(),0) | week(now(),1) |
+-------------+---------------+---------------+
|           4 |             4 |             5 |
+-------------+---------------+---------------+
1 row in set (0.04 sec)

从上面的结果可以看出,不同的mode参数,对应的值不同。这个函数使用的频率不是特别高,可以简单了解下。

weekofyear算的是某天位于一年中的第几周,示例如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select weekofyear(now());
+-------------------+
| weekofyear(now()) |
+-------------------+
|                 5 |
+-------------------+
1 row in set (0.00 sec)

8.获取天数的函数dayofyear和dayofmonth

这两个函数分别获取的是当天在本年度的天数和本月的天数位置:

代码语言:javascript
复制
root@localhost:3306 [sys]>select dayofyear(now()),dayofmonth(now());
+------------------+-------------------+
| dayofyear(now()) | dayofmonth(now()) |
+------------------+-------------------+
|               31 |                31 |
+------------------+-------------------+
1 row in set (0.00 sec)

今天日子比较特殊,今天是本年度的第31天也是本月的第31天,所以计算的结果都是31,。

9.获取年份、季度、小时、分钟、秒数的函数

其中year返回年份,quarter返回季度,hour返回小时,minute返回分钟,second返回秒数:

代码语言:javascript
复制
root@localhost:3306 [sys]>select year(now()),quarter(now()),hour(now()),minute(n
ow()),second(now());
+-------------+----------------+-------------+---------------+---------------+
| year(now()) | quarter(now()) | hour(now()) | minute(now()) | second(now()) |
+-------------+----------------+-------------+---------------+---------------+
|        2019 |              1 |          22 |            22 |             2 |
+-------------+----------------+-------------+---------------+---------------+
1 row in set (0.00 sec)

10.获取日期的指定值的函数extract

这个函数可以将信息从date类型的时间中提取出来,提取的方法如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select extract(year from now()) as `year`,extract(day_
minute from now()) as `day_minute`;
+------+------------+
| year | day_minute |
+------+------------+
| 2019 |       2227 |
+------+------------+
1 row in set (0.00 sec)

11.时间和秒数相互转换的函数

sec_to_time和time_to_sec函数,具体计算方法是 小时*3600+分钟*60+秒数,实际用法如下:

代码语言:javascript
复制
root@localhost:3306 [sys]>select time_to_sec('22:33:44');
+-------------------------+
| time_to_sec('22:33:44') |
+-------------------------+
|                   81224 |
+-------------------------+
1 row in set (0.00 sec)



root@localhost:3306 [sys]>select sec_to_time(81224),sec_to_time(81224)+0,time_to
_sec('22:33:44'),sec_to_time('81224')\G
*************************** 1. row ***************************
     sec_to_time(81224): 22:33:44
   sec_to_time(81224)+0: 223344
time_to_sec('22:33:44'): 81224
   sec_to_time('81224'): 22:33:44.000000
1 row in set (0.00 sec)

12.计算时间和日期的函数

时间和日期的计算函数比较多,这里首先进行罗列:date_add、adddate、date_sub、subdate、addtime、subtime、date_diff

其中date_add函数的使用方法如下:

date_add(date,interval expr type)

来看示例、添加1s和添加1分1s以及减去1s

代码语言:javascript
复制
root@localhost:3306 [sys]>select date_add('2019-01-31 23:59:59',interval 1 secon
d) as col1,adddate('2019-01-31 23:59:59',interval 1 second) as col2;
+---------------------+---------------------+
| col1                | col2                |
+---------------------+---------------------+
| 2019-02-01 00:00:00 | 2019-02-01 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)

root@localhost:3306 [sys]>select date_add('2019-02-01 00:00:00',interval '1:1' m
inute_second) as col1,subdate('2019-02-01 00:00:00',interval 1 second) as col2;
+---------------------+---------------------+
| col1                | col2                |
+---------------------+---------------------+
| 2019-02-01 00:01:01 | 2019-01-31 23:59:59 |
+---------------------+---------------------+
1 row in set (0.00 sec)

再来看addtime和subtime的示例:

代码语言:javascript
复制
root@localhost:3306 [sys]>select addtime('2019-01-31 23:59:59','1:1:1'),addtime(
'02:02:02','01:01:01');
+----------------------------------------+--------------------------------+
| addtime('2019-01-31 23:59:59','1:1:1') | addtime('02:02:02','01:01:01') |
+----------------------------------------+--------------------------------+
| 2019-02-01 01:01:00                    | 03:03:03                       |
+----------------------------------------+--------------------------------+
1 row in set (0.04 sec)

root@localhost:3306 [sys]>select subtime('2019-01-31 23:59:59','1:1:1'),subtime(
'02:02:02','01:01:01');
+----------------------------------------+--------------------------------+
| subtime('2019-01-31 23:59:59','1:1:1') | subtime('02:02:02','01:01:01') |
+----------------------------------------+--------------------------------+
| 2019-01-31 22:58:58                    | 01:01:01                       |
+----------------------------------------+--------------------------------+
1 row in set (0.00 sec)

大概就这么多,还有一些格式化输出的内容,不太常用,今天暂时就不做示例了,后续有时间,会单独写出来。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档