赞
踩
MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。
CURDATE()函数用于返回当前日期,只包含年、月、日部分,格式为YYYY-MM-DD。使用示例如下:
- mysql> SELECT CURDATE();
- +------------+
- | CURDATE() |
- +------------+
- | 2019-12-11 |
- +------------+
- 1 row in set (0.00 sec)
CURRENT_DATE()函数的作用与CURDATE()函数相同,不再赘述。
CURTIME()函数用于返回当前时间,只包含时、分、秒部分,格式为HH:MM:SS。使用示例如下:
- mysql> SELECT CURTIME();
- +-----------+
- | CURTIME() |
- +-----------+
- | 11:27:44 |
- +-----------+
- 1 row in set (0.00 sec)
CURRENT_TIME()函数的作用与CURTIME函数相同,不再赘述。
NOW()函数用于返回当前日期和时间,包含年、月、日、时、分、秒,格式为YYYY-MM-DD HH:MM:SS。使用示例如下:
- mysql> SELECT NOW();
- +---------------------+
- | NOW() |
- +---------------------+
- | 2019-12-15 11:29:22 |
- +---------------------+
- 1 row in set (0.00 sec)
CURRENT_TIMESTAMP()函数、LOCALTIME()函数、LOCALTIMESTAMP()函数、SYSDATE()函数的作用与NOW()函数相同,不再赘述。
将date转化为UNIX时间戳。使用示例如下:
- mysql> SELECT UNIX_TIMESTAMP(now());
- +-----------------------+
- | UNIX_TIMESTAMP(now()) |
- +-----------------------+
- | 1576380910 |
- +-----------------------+
- 1 row in set (0.01 sec)
- mysql> SELECT UNIX_TIMESTAMP(CURDATE());
- +---------------------------+
- | UNIX_TIMESTAMP(CURDATE()) |
- +---------------------------+
- | 1576339200 |
- +---------------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT UNIX_TIMESTAMP(CURTIME());
- +---------------------------+
- | UNIX_TIMESTAMP(CURTIME()) |
- +---------------------------+
- | 1576380969 |
- +---------------------------+
- 1 row in set (0.00 sec)
FROM_UNIXTIME(timestamp)函数将UNIX时间戳转化为日期时间,格式为YYYY-MM-DD HH:MM:SS,与UNIX_TIMESTAMP(date)函数互为反函数。使用示例如下:
- mysql> SELECT FROM_UNIXTIME(1576380910);
- +---------------------------+
- | FROM_UNIXTIME(1576380910) |
- +---------------------------+
- | 2019-12-15 11:35:10 |
- +---------------------------+
- 1 row in set (0.00 sec)
UTC_DATE()函数用于返回UTC日期。使用示例如下:
- mysql> SELECT UTC_DATE();
- +------------+
- | UTC_DATE() |
- +------------+
- | 2019-12-15 |
- +------------+
- 1 row in set (0.00 sec)
也可以返回YYYYMMDD格式的日期。使用示例如下:
- mysql> SELECT UTC_DATE()+0;
- +--------------+
- | UTC_DATE()+0 |
- +--------------+
- | 20191215 |
- +--------------+
- 1 row in set (0.00 sec)
UTC_TIME()函数用于返回UTC时间。使用示例如下:
- mysql> SELECT UTC_TIME();
- +------------+
- | UTC_TIME() |
- +------------+
- | 06:39:00 |
- +------------+
- 1 row in set (0.00 sec)
YEAR(date)函数用于返回日期所在的年份,取值返回为1970~2069。使用示例如下:
- mysql> SELECT YEAR(NOW());
- +-------------+
- | YEAR(NOW()) |
- +-------------+
- | 2019 |
- +-------------+
- 1 row in set (0.00 sec)
注意:00~69会被转化为2000~2069,70~99会被转化为1970~1999。
MONTH(date)函数用于返回日期对应的月份,取值返回为1~12。使用示例如下:
- mysql> SELECT MONTH(NOW());
- +--------------+
- | MONTH(NOW()) |
- +--------------+
- | 12 |
- +--------------+
- 1 row in set (0.00 sec)
MONTHNAME(date)函数用于返回日期所在月份的英文名称。使用示例如下:
- mysql> SELECT MONTHNAME(NOW());
- +------------------+
- | MONTHNAME(NOW()) |
- +------------------+
- | December |
- +------------------+
- 1 row in set (0.00 sec)
DAY(date)函数只返回日期。使用示例如下:
- mysql> SELECT DAY(NOW());
- +------------+
- | DAY(NOW()) |
- +------------+
- | 15 |
- +------------+
- 1 row in set (0.00 sec)
DAYNAME(date)函数用于返回日期对应星期的英文名称。使用示例如下:
- mysql> SELECT DAYNAME(NOW());
- +----------------+
- | DAYNAME(NOW()) |
- +----------------+
- | Sunday |
- +----------------+
- 1 row in set (0.00 sec)
- mysql> SELECT DAYNAME('2020-01-01');
- +-----------------------+
- | DAYNAME('2020-01-01') |
- +-----------------------+
- | Wednesday |
- +-----------------------+
- 1 row in set (0.00 sec)
DAYOFWEEK(date)函数用于返回日期对应的一周中的索引值。1表示星期日,2表示星期一,以此类推。使用示例如下:
- mysql> SELECT DAYOFWEEK(NOW());
- +------------------+
- | DAYOFWEEK(NOW()) |
- +------------------+
- | 1 |
- +------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT DAYOFWEEK('2020-01-01');
- +-------------------------+
- | DAYOFWEEK('2020-01-01') |
- +-------------------------+
- | 4 |
- +-------------------------+
- 1 row in set (0.00 sec)
WEEKDAY(date)函数返回日期对应的一周中的索引值。0表示星期一,1表示星期二,以此类推。使用示例如下:
- mysql> SELECT WEEKDAY(NOW());
- +----------------+
- | WEEKDAY(NOW()) |
- +----------------+
- | 6 |
- +----------------+
- 1 row in set (0.00 sec)
- mysql> SELECT WEEKDAY('2020-01-01');
- +-----------------------+
- | WEEKDAY('2020-01-01') |
- +-----------------------+
- | 2 |
- +-----------------------+
- 1 row in set (0.00 sec)
WEEK(date)函数返回给定日期是一年中的第几周。使用示例如下:
- mysql> SELECT WEEK(NOW());
- +-------------+
- | WEEK(NOW()) |
- +-------------+
- | 50 |
- +-------------+
- 1 row in set (0.00 sec)
WEEKOFYEAR(date)函数返回日期位于一年中的第几周。使用示例如下:
- mysql> SELECT WEEKOFYEAR(NOW());
- +-------------------+
- | WEEKOFYEAR(NOW()) |
- +-------------------+
- | 50 |
- +-------------------+
- 1 row in set (0.00 sec)
DAYOFYEAR(date)函数返回日期是一年中的第几天。使用示例如下:
- mysql> SELECT DAYOFYEAR(NOW());
- +------------------+
- | DAYOFYEAR(NOW()) |
- +------------------+
- | 349 |
- +------------------+
- 1 row in set (0.00 sec)
DAYOFMONTH(date)函数返回日期位于所在月份的第几天。使用示例如下:
- mysql> SELECT DAYOFMONTH(NOW());
- +-------------------+
- | DAYOFMONTH(NOW()) |
- +-------------------+
- | 15 |
- +-------------------+
- 1 row in set (0.00 sec)
QUARTER(date)函数返回日期对应的季度,范围为1~4。使用示例如下:
- mysql> SELECT QUARTER(NOW());
- +----------------+
- | QUARTER(NOW()) |
- +----------------+
- | 4 |
- +----------------+
- 1 row in set (0.00 sec)
HOUR(time)函数返回指定时间的小时。使用示例如下:
- mysql> SELECT HOUR(NOW());
- +-------------+
- | HOUR(NOW()) |
- +-------------+
- | 11 |
- +-------------+
- 1 row in set (0.00 sec)
MINUTE(time)函数返回指定时间的分钟,取值范围0~59。使用示例如下:
- mysql> SELECT MINUTE(NOW());
- +---------------+
- | MINUTE(NOW()) |
- +---------------+
- | 45 |
- +---------------+
- 1 row in set (0.00 sec)
SECOND(time)函数返回指定时间的秒数,取值范围0~59。使用示例如下:
- mysql> SELECT SECOND(NOW());
- +---------------+
- | SECOND(NOW()) |
- +---------------+
- | 22 |
- +---------------+
- 1 row in set (0.00 sec)
EXTRACT(type FROM date)函数返回指定日期中特定的部分,type指定返回的值。其中,type的取值如表11-1所示。
表11-1 EXTRACT(type FROM date)函数中type的取值与含义
注意:当EXTRACT(type FROM date)函数中的type取值为MINUTE_SECOND时,表示返回分钟和秒值,当date中的分钟为12,秒为12时,返回的结果为1212。也就是说,将分钟后面直接拼接上秒值。type取值为其他带有下划线的值时,也遵循同样的规律。
使用示例如下:
- mysql> SELECT EXTRACT(HOUR_MINUTE FROM NOW());
- +---------------------------------+
- | EXTRACT(HOUR_MINUTE FROM NOW()) |
- +---------------------------------+
- | 2142 |
- +---------------------------------+
- 1 row in set (0.00 sec)
TIME_TO_SEC(time)函数将time转化为秒并返回结果值。转化的公式为:小时*3600+分钟*60+秒。使用示例如下:
- mysql> SELECT TIME_TO_SEC(NOW());
- +--------------------+
- | TIME_TO_SEC(NOW()) |
- +--------------------+
- | 78774 |
- +--------------------+
- 1 row in set (0.00 sec)
SEC_TO_TIME(seconds)函数将seconds描述转化为包含小时、分钟和秒的时间。使用示例如下:
- mysql> SELECT SEC_TO_TIME(78774);
- +--------------------+
- | SEC_TO_TIME(78774) |
- +--------------------+
- | 21:52:54 |
- +--------------------+
- 1 row in set (0.12 sec)
DATE_ADD(date,INTERVAL expr type)函数返回与date相差INTERVAL时间间隔的日期,本质上是日期的加操作。该函数中的type是间隔的类型,间隔类型如表11-2所示。
表11-2 DATE_ADD(date,INTERVAL expr type)函数中type的取值
使用示例如下:
- mysql> SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);
- +---------------------------------+
- | DATE_ADD(NOW(), INTERVAL 1 DAY) |
- +---------------------------------+
- | 2019-12-16 22:04:36 |
- +---------------------------------+
- 1 row in set (0.00 sec)
ADDDATE(date,INTERVAL expr type)函数与DATE_ADD(date,INTERVAL expr type)函数的作用相同,不再赘述。
DATE_SUB(date,INTERVAL expr type)函数返回与date相差INTERVAL时间间隔的日期,本质上是日期的减操作,其中type的取值见表11-2。使用示例如下:
- mysql> SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
- +---------------------------------+
- | DATE_SUB(NOW(), INTERVAL 1 DAY) |
- +---------------------------------+
- | 2019-12-14 22:09:10 |
- +---------------------------------+
- 1 row in set (0.00 sec)
SUBDATE(date,INTERVAL expr type)函数与DATE_SUB(date,INTERVAL expr type)函数作用相同,不再赘述。
注意:DATE_ADD、ADDDATE、DATE_SUB和SUBDATE这4个函数均可以指定负值。
ADDTIME(time1,time2)函数返回time1加上time2的时间。其中,time2是一个表达式,也可以是一个数字,当time2为一个数字时,代表的是秒。使用示例如下:
- mysql> SELECT ADDTIME(NOW(), 50);
- +---------------------+
- | ADDTIME(NOW(), 50) |
- +---------------------+
- | 2019-12-15 22:17:47 |
- +---------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT ADDTIME(NOW(), '1:1:1');
- +-------------------------+
- | ADDTIME(NOW(), '1:1:1') |
- +-------------------------+
- | 2019-12-15 23:18:46 |
- +-------------------------+
- 1 row in set (0.00 sec)
ADDTIME(NOW(),'1:1:1')表示的含义为返回为当前时间加上1小时1分1秒之后的时间。
ADDTIME(time1,time2)函数中的time2的值也可以为负值。
- mysql> SELECT ADDTIME(NOW(), '-1:-1:-1');
- +----------------------------+
- | ADDTIME(NOW(), '-1:-1:-1') |
- +----------------------------+
- | 2019-12-15 22:19:29 |
- +----------------------------+
- 1 row in set, 1 warning (0.01 sec)
ADDTIME(NOW(),'-1:-1:-1')表示的含义为返回当前时间减去1小时1分1秒之后的时间。
SUBTIME(time1,time2)函数返回time1减去time2后的时间。其中,time2是一个表达式,也可以是一个数字,当time2为一个数字时,代表的是秒。使用示例如下:
- mysql> SELECT SUBTIME(NOW(), 50);
- +---------------------+
- | SUBTIME(NOW(), 50) |
- +---------------------+
- | 2019-12-15 22:23:35 |
- +---------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT SUBTIME(NOW(), '1:1:1');
- +-------------------------+
- | SUBTIME(NOW(), '1:1:1') |
- +-------------------------+
- | 2019-12-15 21:23:50 |
- +-------------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT SUBTIME(NOW(), '-1:-1:-1');
- +----------------------------+
- | SUBTIME(NOW(), '-1:-1:-1') |
- +----------------------------+
- | 2019-12-15 22:25:11 |
- +----------------------------+
- 1 row in set, 1 warning (0.00 sec)
DATEDIFF(date1,date2)函数计算两个日期之间相差的天数。使用示例如下:
- mysql> SELECT DATEDIFF(NOW(), '1970-01-01');
- +-------------------------------+
- | DATEDIFF(NOW(), '1970-01-01') |
- +-------------------------------+
- | 18245 |
- +-------------------------------+
- 1 row in set (0.00 sec)
FROM_DAYS(N)函数返回从0000年1月1日起,N天以后的日期。使用示例如下:
- mysql> SELECT FROM_DAYS(366);
- +----------------+
- | FROM_DAYS(366) |
- +----------------+
- | 0001-01-01 |
- +----------------+
- 1 row in set (0.00 sec)
LAST_DAY(date)函数返回date所在月份的最后一天的日期。使用示例如下:
- mysql> SELECT LAST_DAY(NOW());
- +-----------------+
- | LAST_DAY(NOW()) |
- +-----------------+
- | 2019-12-31 |
- +-----------------+
- 1 row in set (0.00 sec)
MAKEDATE(year,n)函数针对给定年份与所在年份中的天数返回一个日期。使用示例如下:
- mysql> SELECT MAKEDATE(2020,1);
- +------------------+
- | MAKEDATE(2020,1) |
- +------------------+
- | 2020-01-01 |
- +------------------+
- 1 row in set (0.00 sec)
- mysql> SELECT MAKEDATE(2020,32);
- +-------------------+
- | MAKEDATE(2020,32) |
- +-------------------+
- | 2020-02-01 |
- +-------------------+
- 1 row in set (0.00 sec)
将给定的小时、分钟和秒组合成时间并返回。使用示例如下:
- mysql> SELECT MAKETIME(1,1,1);
- +-----------------+
- | MAKETIME(1,1,1) |
- +-----------------+
- | 01:01:01 |
- +-----------------+
- 1 row in set (0.00 sec)
PERIOD_ADD(time,n)函数返回time加上n后的时间。使用示例如下:
- mysql> SELECT PERIOD_ADD(20200101010101,1);
- +------------------------------+
- | PERIOD_ADD(20200101010101,1) |
- +------------------------------+
- | 20200101010102 |
- +------------------------------+
- 1 row in set (0.00 sec)
TO_DAYS(date)函数返回日期date距离0000年1月1日的天数。使用示例如下:
- mysql> SELECT TO_DAYS(NOW());
- +----------------+
- | TO_DAYS(NOW()) |
- +----------------+
- | 737773 |
- +----------------+
- 1 row in set (0.00 sec)
DATE_FORMAT(date,format)函数按照指定的格式format来格式化日期date。其中,format常用的格式符如表11-3所示。
表11-3 DATE_FORMAT(date,format)函数中format常用的格式符
使用示例如下:
- mysql> SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
- +--------------------------------+
- | DATE_FORMAT(NOW(), '%H:%i:%s') |
- +--------------------------------+
- | 22:57:34 |
- +--------------------------------+
- 1 row in set (0.00 sec)
TIME_FORMAT(time,format)函数按照指定的格式format来格式化日期date。其中,format常用的格式符见表11-3。使用示例如下:
- mysql> SELECT TIME_FORMAT(NOW(), '%H:%i:%s');
- +--------------------------------+
- | TIME_FORMAT(NOW(), '%H:%i:%s') |
- +--------------------------------+
- | 22:59:40 |
- +--------------------------------+
- 1 row in set (0.00 sec)
GET_FORMAT(date_type,format_type)函数返回日期字符串的显示格式,其中date_type表示日期类型,format_type表示格式化类型。日期类型与格式化类型的取值如表11-4所示。
表11-4 GET_FORMAT函数返回的格式化字符串
使用示例如下:
- mysql> SELECT GET_FORMAT(DATE, 'USA');
- +-------------------------+
- | GET_FORMAT(DATE, 'USA') |
- +-------------------------+
- | %m.%d.%Y |
- +-------------------------+
- 1 row in set (0.00 sec)
STR_TO_DATE(str,format)函数将字符串str按照format格式转化为日期或时间。其中,format的取值见表11-3。使用示例如下:
- mysql> SELECT STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d');
- +-----------------------------------------------+
- | STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') |
- +-----------------------------------------------+
- | 2020-01-01 |
- +-----------------------------------------------+
- 1 row in set, 1 warning (0.00 sec)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。