回到首页☞
今天有个临时需求,统计所有纳管的服务器,自动化任务哪些服务器执行的比较慢。
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亿多数据去比对服务器就嗝屁了
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
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) 函数的 一个逆转换。
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
MySQL (日期、天数)转换函数:to_days(date), from_days(days)
-- 查询每天入职人数
select count(*) from t_emp t group by TO_DAYS(t.hire_date)
MySQL (时间、秒)转换函数
select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'
MySQL 拼凑日期、时间函数
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
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'
回到首页☞