mysql datetime类型处理计算时间差

数据库  与上面有所差距 下面的查询没带时间查询  想要满足上面一段时间查询 只需要带上where 就好


第一个sql 

select id,userid,count(*) as loginnum,sum(TIMESTAMPDIFF(MINUTE,logintime, logouttime)) as times from log group by userid;



第2个sql 第二个没看懂 也不知道做的方法是否有问题 思路既然5个等级一组 那么除以5 再向下取整 


select id,userid,level, floor(level/5)  as lv from log group by userid;


结果分析 如下 每5级 那么0-4级 是一组 虽然没有0级 但是0-4级 其实没必要统计 因为游戏里 大概都是比如地图90-94  

95-99 这样分 95级以上可以进入 那么94级 是不可以进入的 所以按照这个思路来看 那么0-4 基本上不受影响

上面所有查询都没加 时间判断 如果相满足一段时间查询 那么就 where logintime > 'xxxxxx' and logouttime < 'xxxxxx'

比如 select id,userid,level, floor(level/5)  as lv from log  where logintime > '2018-04-09 01:01:01' and logouttime < '2018-08-09 01:01:01' group by userid ;

下面这样写会更好

select id,userid,level, floor(level/5)  as lv from log  where unix_timestamp(logintime) >unix_timestamp( '2018-04-01 01:01:01')  and unix_timestamp(logouttime) <  unix_timestamp('2018-05-09 01:01:01')  group by userid ;

参考文章 

https://www.cnblogs.com/nick-huang/p/4447717.html

随记MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)

1. 时间差函数(TIMESTAMPDIFF、DATEDIFF)

需要用MySQL计算时间差,使用TIMESTAMPDIFF、DATEDIFF,记录一下实验结果

复制代码
--0
select datediff(now(), now());

--2
select datediff('2015-04-22 23:59:00', '2015-04-20 00:00:00');

--2
select datediff('2015-04-22 00:00:00', '2015-04-20 23:59:00');

--1
select TIMESTAMPDIFF(DAY, '2015-04-20 23:59:00', '2015-04-22 00:00:00');

--2
select TIMESTAMPDIFF(DAY, '2015-04-20 00:00:00', '2015-04-22 00:00:00');

--2
select TIMESTAMPDIFF(DAY, '2015-04-20 00:00:00', '2015-04-22 12:00:00');

--2
select TIMESTAMPDIFF(DAY, '2015-04-20 00:00:00', '2015-04-22 23:59:00');

--71
select TIMESTAMPDIFF(HOUR, '2015-04-20 00:00:00', '2015-04-22 23:00:00');

--4260
select TIMESTAMPDIFF(MINUTE, '2015-04-20 00:00:00', '2015-04-22 23:00:00');
复制代码

关于TIMESTAMPDIFF描述,见http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff

如需知道TIMESTAMPDIFF还能以哪些单位返回数据,可参考TIMESTAMPADD的描述:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampadd

2. 日期转换计算函数(date_add、day、date_format、str_to_date)

复制代码
-- 用日期与字符串转换,计算当月第一天、下月第一天
select curdate() as '当前日期', 
DATE_FORMAT(curdate(), '%Y-%m') as '当前月份', 
str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d') as '当前月的第一天', 
date_add(str_to_date(concat(DATE_FORMAT(curdate(), '%Y-%m'), '-01'), '%Y-%m-%d'), interval 1 month) as '下月的第一天';

-- 当前月的最后一天
select last_day(curdate());

-- 下月第一天
select date_add(last_day(curdate()), interval 1 day);

-- 当天为当月的第几天
select day(curdate());

-- 当月第一天
select date_add(curdate(), interval 1-(day(curdate())) day);
复制代码

 

作者:Nick Huang 博客:http://www.cnblogs.com/nick-huang/ 本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。






  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值