sql,限制时间

iq0todco  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(443)

嗨,我一直在研究一个简单的数据集,比如

no  Date                        time_in             time_out       extrahours
1   2018-05-01 00:00:00.0000000 09:00:00.0000000    18:50:00.0000000    0
1   2018-05-02 00:00:00.0000000 08:00:00.0000000    20:00:00.0000000    3
1   2018-05-03 00:00:00.0000000 09:50:00.0000000    19:50:00.0000000    1
1   2018-05-04 00:00:00.0000000 07:00:00.0000000    17:45:00.0000000    1
1   2018-05-05 00:00:00.0000000 09:15:00.0000000    13:50:00.0000000    -5
1   2018-05-06 00:00:00.0000000 08:45:00.0000000    23:55:00.0000000    6
1   2018-05-07 00:00:00.0000000 12:00:00.0000000    23:00:00.0000000    2
1   2018-05-08 00:00:00.0000000 02:30:00.0000000    23:55:00.0000000    12
1   2018-05-09 00:00:00.0000000 10:50:00.0000000    19:50:00.0000000    0
1   2018-05-10 00:00:00.0000000 08:36:00.0000000    19:50:00.0000000    2

我被要求把额外的时间限制在2小时之内,也就是说,周末(星期六或星期天)额外的时间必须得到补偿
加班时间0 0 0 0 0 0 0(星期六)2 2如果他在星期六和星期天工作9小时,那么加班时间会被处理,否则他们会得到补偿。
请花点时间回答我的问题谢谢。

zte4gxcn

zte4gxcn1#

你需要做的是 CASE WHEN ,以查看您的小时数是否可以除以2,只要大于0,就应该是2。
然后你把你的小时数除以2得到你的两个不同的小时数。你可以使用mysql HOUR() 功能来实现这一点。
完成后,使用 SEC_TO_TIME() 函数并相应地相乘,得到你想要的时间格式,60分钟,然后60小时。
我用了 MINUTE() 函数来获取分钟数,并继续使用与小时数相同的方法。
我想出了这样的办法:

SELECT
  empNo,
  (
    CASE
      WHEN
        extraHours > 0
      THEN
        SEC_TO_TIME(((HOUR(extraHours) / 2)*60)*60)
      END) as otOne,
  (
    CASE
      WHEN
        extraHours > 0
      THEN
        SEC_TO_TIME(((HOUR(extraHours) / 2)*60)*60)
      END) as otTwo,
  SEC_TO_TIME(MINUTE(extraHours)*60) as otThree
FROM
  tbl_time

工作sql fiddle
如果需要一个带秒的额外字段,只需使用相同的方法,并使用 SECOND() 功能。
这个答案主要是关于你的另一个被标记为重复的问题。

相关问题