sql, ограничение часов - PullRequest
0 голосов
/ 28 мая 2018

Хе, я работал над простым набором данных, таким как

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 (сб) 2 2 2 2 2, если он работает по субботам и воскресеньям в течение 9 часов, то дополнительные часы обрабатываются в течение определенного времени, иначе они получают компенсацию,

пожалуйста, найдите время, чтобы ответить на мой вопрос, спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Что вам нужно сделать, это сделать CASE WHEN, чтобы увидеть, делятся ли ваши часы на 2, и они должны быть такими, чтобы они были больше 0.

Затем вы берете свои часыи разделите их на 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

Если вам нужно дополнительное поле с секундами, вы просто используете тот же подход и используете функцию SECOND().

Этот ответ в основном относится к вашему другому вопросу, который был отмечен как дубликат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...