0

MySQLで、勤務シフトの開始時刻と終了時刻を日時タイプで格納するテーブルを作成しました。それらから2つのことを計算する必要があります(MySQLで)。まず、午後10時から午前6時までのシフトで誰かが何分働いたか、そして日曜日に何分働いたか。日曜日はそれらの夜の時間よりも優先されるべきであり、それらの日曜日の朝を2回カウントするべきではありません。

前もって感謝します。

D。

私はこれを試しましたが、うまくいきませんでした:

SELECT *,
IF(DAYNAME(start)=DAYNAME(end),
    IF(TIME(start)<='6:00:00' AND TIME(end)<='6:00:00',TIME(end)-TIME(start),
        IF(TIME(start)>='22:00:00' AND TIME(end)>='22:00:00',TIME(end)-TIME(start),
            IF(TIME(start)>='6:00:00' AND TIME(end)<='22:00:00',0,
                IF(TIME(start)<='6:00:00' AND TIME(end)<='22:00:00','6:00:00'-TIME(start),
                    IF(TIME(start)>='6:00:00' AND TIME(end)>='22:00:00',TIME(end)-'22:00:00',NULL)
                    )
                )
            )
        ),
    IF(TIME(start)<='22:00:00' AND TIME(end)<='6:00:00','2:00:00'+TIME(end),
        IF(TIME(start)<='22:00' AND TIME(end)>='6:00:00','8:00:00',
            IF(TIME(start)>='22:00:00' AND TIME(end)<='6:00:00','24:00:00'-TIME(start)+TIME(end),
                IF(TIME(start)>='22:00:00' AND TIME(end)>='6:00:00','24:00:00'-TIME(start)+'6:00:00',NULL)
                )
            )
        )
    ) AS ExtraTime FROM `work`
4

2 に答える 2

1

分働いた:

SELECT TIMESTAMPDIFF(MINUTE, `start_time`, `end_time`) FROM ... WHERE DAYOFWEEK(`start_time`) != 1

日曜日の労働時間:

SELECT TIMESTAMPDIFF(MINUTE, `start_time`, `end_time`) FROM ... WHERE DAYOFWEEK(`start_time`) = 1
于 2011-06-17T09:01:08.947 に答える
0

PHP で、次のコードを試してください (警告: テストされていません)。

<?php
$regularPay = 100; //100 dollars a day
$weekendPay = $regularPay + ($regularPay / 2); //150 dollars over weekend
$link = mysqli_connect("localhost","username","password");
mysqli_select_db("dbname");
$pay = date("w")==0 or date("w")==6 ? $weekendPay : $regularPay; //0=Sun, 6=Sat
$query = mysqli_query($link,"INSERT INTO pay SET employee='John Smith',pay='$pay'");
?>

文字列をコンピュータに適した値に置き換えるだけです。

Ad@m.

于 2011-06-17T09:11:31.993 に答える