今天有学生问个关于MySQL时间操作的问题,直接看图:
查询某日人员的出勤时间问题。
我们都知道,企业员工考勤使用打卡方式,每天会记录每个员工的多次打卡记录,最后取每个员工的每天:
上班时间:当日最早时间;
下班时间:当日最晚时间。
所以分析查询每个员工每日考勤记录,需要根据员工分组,当天时间、时间最小和最大,时间格式化等操作,下面举例模拟该问题:
学生表student
学生考勤表student_attendance
SELECT
stu.sid,
stu.sname,
date_format(min(clock_time), '%H:%i') '入园',
date_format(max(clock_time), '%H:%i') '出园'
FROM
student stu,
student_attendance sa
WHERE
stu.sid = sa.stuid
AND DATEDIFF(sa.clock_time, '2018-07-16') = 0
GROUP BY
stu.sid
解释:
1.date_format(min(clock_time), '%H:%i') :
min(clock_time) 按人员分组后,获取最小时间
date_format(min(clock_time), '%H:%i') 将获得的时间格式化,获得 “分钟:秒“的格式
date_format(date,format) 时间格式化,获得满足格式的字符串
data表示要格式化的时间
format格式 '%Y%m%d%H%i%s' 分别为:%Y 年 %m月 %d日 %H时 %i分 %s秒
date_format(max(clock_time), '%H:%i') '出园'
语法同上。
2.DATEDIFF(sa.clock_time, '2018-07-16') = 0
sa.clock_time为打卡时间
‘2018-07-16’为设定的某天,根据项目需求,应该是传递的考勤日期
datediff(date1,date2) MySQL 日期相减函数
date1和date2日期做差,返回相差天数。
判断当天,日期做差为0,即为当天。
timediff(time1,time2) MySQL 时间相减函数
关于MySQL的时间函数,还是需要给大家总结一下,所以请参考《MySQL日期操作函数汇总》文章