mysql数据库时间计算

一、时间戳和日期时间的转换

# 1.获取当前日期时间
select NOW(); --返回当前的日期和时间,包括年月日时分秒。2024-04-10 16:19:49
select CURDATE(); --函数返回当前的日期,只包括年月日,不包括时间 2024-01-05
select SYSDATE();--函数返回当前的日期和时间,与NOW()函数类似,包括年月日时分秒,但是SYSDATE()函数在每次调用时会从操作系统获取当前时间,而NOW()函数在连接建立时获取一次,并在连接期间返回相同的值。2024-04-10 16:19:49
SELECT CURTIME();--函数返回当前的时间,只包括时分秒,不包括日期 07:31:28
SELECT CURRENT_TIMESTAMP(); --函数返回当前的日期和时间,包括年月日时分秒,与NOW()函数类似,但是CURRENT_TIMESTAMP()是标准SQL语法,而NOW()是MySQL特有的函数 2024-04-10 16:19:49
SELECT CURRENT_DATE(); -- 函数返回当前的日期,只包括年月日,不包括时间2024-4-10
SELECT  CURRENT_TIME();--函数返回当前的时间,只包括时分秒,不包括日期 07:31:28
--这些函数的返回值类型都是DATETIME类型(CURRENT_DATE()和CURRENT_TIME()是DATE和TIME类型),可以根据需要进行格式化或转换。另外,这些函数都是在MySQL服务器的时区下运行,所以返回的时间也会根据服务器的时区进行调整

# 2.获取当前时间戳
select unix_timestamp();

# 3.时间戳转成日期时间
select from_unixtime(1688264330);

# 4.日期时间转成时间戳
select unix_timestamp('2023-07-02 00:00:00');

二、日期时间的加减计算

1、date_add()函数

说明:为当前日期增加一个时间间隔

语法格式为DATE_ADD(date,interval expr type)

date:指定的时间日期

interval:固定写法

expr:所增加的时间间隔

type:时间间隔的单位,包括:秒(second)、分钟(minute)、小时(hour)、天(day)、星期(week)、月(month)、季(quarter)、年(year)等

# 加1天
select now(),date_add(now(), interval 1 day);
# 加1小时
select now(),date_add(now(), interval 1 hour);
# 加1分钟
select now(),date_add(now(), interval 1 minute );
# 加1秒
select now(),date_add(now(), interval 1 second );

# 加1周
select now(),date_add(now(), interval 1 week);
# 加1个月
select now(),date_add(now(), interval 1 month);
# 加1季度
select now(),date_add(now(), interval 1 quarter );
# 加1年
select now(),date_add(now(), interval 1 year );

2、date_sub()

说明:为当前日期减去一个时间间隔

语法格式:DATE_SUB(date,interval expr type)

date:指定的时间日期

interval:固定写法

expr:所减去的时间间隔

type:时间间隔的单位,包括:秒(second)、分钟(minute)、小时(hour)、天(day)、星期(week)、月(month)、季(quarter)、年(year)等

# 减1天
select date_sub(now(), interval 1 day);
# 减1小时
select date_sub(now(), interval 1 hour);
# 减1分钟
select now(),date_sub(now(), interval 1 minute );
# 减1秒
select now(),date_sub(now(), interval 1 second );

# 减1周
select now(),date_sub(now(), interval 1 week);
# 减1个月
select now(),date_sub(now(), interval 1 month);
# 减1季度
select now(),date_sub(now(), interval 1 quarter );
# 减1年
select now(),date_sub(now(), interval 1 year );

三、两个日期之前的间隔计算

1、使用TIMEDIFF()函数

TIMEDIFF(结束时间, 开始时间)

TIMEDIFF(expr1, expr2):计算两个TIME或DATETIME值之间的差值,两个必须为相同类型的参数,即TIME或DATETIME。 TIMEDIFF函数返回表示为时间值的expr1- expr2的结果,如果任一参数为NULL,TIMEDIFF函数将返回NULL

1712734705426.png2、使用TIMESTAMPDIFF()函数

TIMESTAMPDIFF(单位,开始时间,结束时间)

TIMESTAMPDIFF(unit,begin,end):计算两个DATE或DATETIME值之间的差值.TIMESTAMPDIFF函数允许其参数具有混合类型,例如,begin是DATE值,end可以是DATETIME值。 如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”的DATETIME值

unit参数是确定(end-begin)的结果的单位,表示为整数。 以下是有效单位:

MICROSECOND(微秒)

SECOND(秒)

MINUTE(分)

HOUR(小时)

DAY(天)

WEEK(周)

MONTH(月)

QUARTER(季度)

YEAR(年)

3、得到XX天XX小时XX分钟XX秒格式的时间

# 将时间间隔换算成XX天XX小时XX分钟XX秒
# 1.通过timestampdiff()函数计算两个日期所间隔的秒数
# 2.然后通过floor(): 返回一个小于或等于X的最大整数,向下取整
# 3.在使用convert()函数分别将秒数换算成:天、小时、分钟、秒,得到结果

select
    convert(floor(timestampdiff(second , '2023-07-05 00:00:00', now())/(3600*24)),char) '天',
    convert(floor(timestampdiff(second , '2023-07-05', now())%(3600*24)/3600),char) '小时',
    convert(floor(timestampdiff(second , '2023-07-05', now())%3600/60),char) '分',
    convert(timestampdiff(second , '2023-07-05', now())%60,char) '秒';