timestamp这种类型就是包含日期和时间的而且根据时区来显示的,将这列的类型设置为date时你看看这一列有没有允许空值,date是有效的数据类型报错的话一般都是没有允许空值后面还default null,你可以用curdate()去返回当前日期。
select user_id,DATE_ADD(MAX(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) ,DATE_ADD(MIN(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) from checkinout group by user_id,DATE_FORMAT(DATE_SUB(checktime,INTERVAL 4 hour),'%Y-%m-%d') ;
试一下上面的sql语句, 我觉得可以实现你的要求,解决思路就是肯定要分组,普通情况我们分组是同一天分在一组,这样会导致比如'2016-07-13 03:00:00' 这种时间会分在07-13号这一天里 ,按你的要求应该分在07-12这天里 才对,,所以我们把时间减去四个小时然后再分组,DATE_SUB(checktime,INTERVAL 4 hour) 这个就是减去四个小时,然后用DATE_FORMAT 格式化成年月日的格式进行group by,select 的时候 MAX(DATE_SUB(checktime,INTERVAL 4 hour),min() 这个是查减了四小时的最大值和最小,也就是当天离开时间和到公司时间(减四小时),在用DATE_ADD 加四个小时,就是原本离开时间和到公司时间
目前你遇到的问题大概是 PHP 获取的时间和 MySQL中获取的时间存在时差
比较直接的解决方案是在 PHP 和 MySQL 中遵循同一时区约定
PHP 在50 之后应该可以直接在代码中设定时区
date_default_timezone_set('PRC');
MySQL 也可以通过修改配置文件 myini 或者 mycnf 确保时区正确
default-time-zone=timezone
问题是你的MySQL服务器可能是在某台美国服务器上租借的,没法修改
所以解决的方法只能是:
修改插件源代码,将 SQL 语句改为
select forum_id, count(post_id) todayposts
from ' POSTS_TABLE '
where date(from_unixtime(post_time)) = date(DATE_ADD(now(), INTERVAL 14 HOUR))
group by forum_id
其中的 DATE_ADD(now(), INTERVAL 14 HOUR) 是-14 还是 14,这需要你仔细考虑下
以上就是关于mysql如何自动获取时间日期的实例详解全部的内容,包括:mysql如何自动获取时间日期的实例详解、求mysql大神帮助!如何将数据按照以每天早上4点为界限进行分组、MYSQL时区相关的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)