MySQL 日期时间函数
一、当前时间日期获取
SELECT NOW(); # 2019-10-24 11:04:10
SELECT CURDATE(); # 2019-10-24
SELECT CURTIME(); # 11:04:10
SELECT SYSDATE(); # 2019-10-24 11:04:09
SELECT CURRENT_TIME(); # 11:04:10
SELECT CURRENT_TIMESTAMP; # 2018-05-21 14:51:37
SELECT CURRENT_TIMESTAMP(); # 2018-05-21 14:51:37
二、时间戳、日期、时间与字符串的转化
#时间转日期
select date('2019-10-24 23:59:59'); # 2019-10-24
#时间日期转字符串,可以在时间格式内拼接常量获取自己想要的时间
select date_format(now(), '%Y-%m-%d'); # 2019-10-24
select date_format(now(), '%Y-%m-%d 23:59:59'); # 2019-10-24 23:59:59
#时间转时间戳
select unix_timestamp(now()); # 1571886871
#字符串转时间,至少包含年月日
select str_to_date('2019-10-27', '%Y-%m-%d'); # 2019-10-27 00:00:00
select str_to_date('2019-10-27', '%Y-%m-%d %h'); # 2019-10-27 00:00:00
select str_to_date('2019-10-27 15:30','%Y-%m-%d %T'); # 2019-10-27 15:30:00
#字符串转时间戳
select unix_timestamp('2019-10-27'); # 1572105600
#时间戳转时间
select from_unixtime(1571886871); # 2019-10-24 11:14:31
#时间戳转字符串
select from_unixtime(1571886871,'%Y-%m-%d %H:%i:%s'); # 2019-10-24 11:14:31
三、日期时间计算函数
#计算日期参数和0000年1月1日之间相隔的天数
select to_days('2019-01-01'); # 737425
#计算从 0000年1月1日 开始经过n天后的日期和时间
select from_days(737420); # 2018-12-27
#获取两个指定日期之间相隔的天数, 前者减后者
select datediff('2019-01-01', '2019-09-15'); # -257
#获取两个指定时间之间相隔的时间, 前者减后者
select timediff('2019-05-21 14:06:43','2019-10-19 12:59:59'); # -838:59:59
#获取日期加上天数之后的日期
select adddate('2018-12-27', 5); # 2019-01-01
#获取日期减去天数之后的日期
select subdate('2019-01-01', 5); # 2018-12-27
subdate与adddate除了上述的天数加减之外,还可以加入单位。
以adddate为例:adddate(date,INTERVAL expr type)
type(单位) | 简述 | type(组合单位) | 简述 |
---|---|---|---|
MICROSECOND | 毫秒 | SECOND_MICROSECOND | 秒毫秒 |
SECOND | 秒 | MINUTE_MICROSECOND | 分毫秒 |
MINUTE | 分 | MINUTE_SECOND | 分秒 |
DAY | 天 | HOUR_MICROSECOND | 时毫秒 |
WEEK | 星期 | HOUR_SECOND | 时秒 |
MONTH | 月 | HOUR_MINUTE | 时分 |
QUARTER | 季度 | DAY_MICROSECOND | 日毫秒 |
YEAR | 年 | DAY_SECOND | 日秒 |
DAY_MINUTE | 日分 | ||
DAY_HOUR | 日时 | ||
YEAR_MONTH | 年月 |
# 涉及到月、季度、年的计算,日保持不变,如果结果的日最大值比员值小,则变为最大值
select adddate('2018-01-31', INTERVAL 1 MONTH); # 2018-02-28
# 组合单位,expr为以任意分隔符分开的数字(且分隔符不需要一致),type则为从左侧单位至右侧单位,依次填入expr分隔的值,当数字数量超过单位范围内的单位数量时,返回null
# 例:从秒开始,时间加上20秒,1分钟 结果 2018-01-31 00:01:20
select adddate('2018-01-31', INTERVAL '1-20' DAY_SECOND);
# 例:从秒开始,时间加上20秒,1分钟,2小时,3天 结果:2018-02-03 02:01:20
select adddate('2018-01-31', INTERVAL '3%^ 2 1-20' DAY_SECOND);