日期和时间函数

回到首页☞

1、日期和时间函数

日期和时间函数_第1张图片

1.1 时间差计算

今天有个临时需求,统计所有纳管的服务器,自动化任务哪些服务器执行的比较慢。

TIMESTAMPDIFF(时间单位,参数1,参数2)

可以设置参数,可以精确到天(DAY),小时(HOUR),分钟(MINUTE),秒(SECOND),毫秒(FRAC_SECOND(低版本不支持,可以用秒,再乘1000)),计算机制为参数2-参数1,最后结果为数字,单位为第一个参数设置的值

(week 周,month 月,quarter 季度,year 年 )这几个单位没有经过测试,但是应该也是支持的
  
  --相差1天
  select TIMESTAMPDIFF(DAY, ‘2018-03-20 23:59:00’, ‘2015-03-22 00:00:00’);
  
  --相差49小时
  select TIMESTAMPDIFF(HOUR, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);
  
  --相差2940分钟
  select TIMESTAMPDIFF(MINUTE, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);
  
  --相差176400秒
  select TIMESTAMPDIFF(SECOND, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);
  
  --相差大于等于15秒
  SELECT * FROM 表名 WHERE TIMESTAMPDIFF(SECOND,start_time(较小的时间),stop_time(较大的时间)) >= 15

DATEDIFF(参数1,参数2)

返回值为相差的天数,int类型,不能定位到时分秒,因为固定天数为单位,所以比上面的少一个可设置的参数,且计算机制为参数1-参数2,与上面的计算机制相反,如果搞错了会计算出负数,mysql也算是给埋了个坑

– 相差2天
   select datediff(‘2018-03-22 09:00:00’, ‘2018-03-20 07:00:00’);

所有的工具的使用都要考虑真实情况:功能可以,pro环境1亿多数据去比对服务器就嗝屁了

2、日期间隔类型

日期和时间函数_第2张图片

3、格式转换说明

日期和时间函数_第3张图片

4.1、时间计算

set @dt = now();

select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);

select date_add(@dt, interval -1 day); -- sub 1 day

5、MySQL 日期转换函数、时间转换函数

5.1、date_format(date,format), time_format(time,format)

MySQL Date/Time to Str(日期/时间转换为字符串)函数:

set @dt = now();

select date_format(@dt, '%Y-%m-%d %H:%i:%s');

MySQL 日期、时间转换函数:date_format(date,format), time_format(time,format) 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。

5.2、str_to_date(str, format)

str_to_date(str,format) 转换函数,可以把一些杂乱无章的字符串转换为日期格式。另外,它也可以转换为时间。“format” 可以参看 MySQL 手册。

select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30

5.3、 to_days

MySQL (日期、天数)转换函数:to_days(date), from_days(days)

-- 查询每天入职人数
select count(*) from t_emp t group by TO_DAYS(t.hire_date)

5.4、time_to_sec(time), sec_to_time(seconds)

MySQL (时间、秒)转换函数

select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'

5.5、makdedate(year,dayofyear), maketime(hour,minute,second)

MySQL 拼凑日期、时间函数

select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'

5.6、MySQL (Unix 时间戳、日期)转换函数

unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

这个非常有用,做自动化的同学都能看到,当然如果直接linux中比对,使用shell 中的date函数也可以。

select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'

select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

回到首页☞

你可能感兴趣的:(mysql)