• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlのcase文で複数の条件を指定する)

MySQLでの複数条件指定と深夜残業時間計算方法

このQ&Aのポイント
  • MySQL初心者のあなたが勤務時間や終了時間を条件にして深夜残業時間を計算する方法について教えます。
  • データの例を挙げながら、MySQLのCASE文を使用して複数条件を指定する方法を説明します。
  • また、勤務時間が8時間以上かつ終了時間が22時以降の場合、深夜残業時間を計算する方法も詳しく解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

AかつBならIFをつかってANDでつなげばいい気がしますが・・・ CASEにこだわるなら、WHENで条件外をしぼってELSEで実数を得ればよいかも ざっくり今回のだとこんな感じ? SELECT name,start_time,end_time,break_time ,CASE WHEN end_time<'22:00:00' THEN NULL WHEN TIMEDIFF(TIMEDIFF(end_time,start_time),break_time)<='08:00:00' THEN NULL ELSE TIMEDIFF(end_time,'22:00:00') END AS SHINYA FROM schedule

komame520
質問者

お礼

ご回答ありがとうございます。 IF文でもいけるんですね、勉強になります。 こだわってはいませんが、まだまだ未熟なもので、今回CASE文しか思いつきませんでした。 IF文でも再度考えてみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

case when (end_time - start_time - break_time)>=8 and end_time > '22:00:00' then (end_time='22:00:00') else 0 end ただし、一日の就業時間が8時間未満だからと言って深夜手当を出さないのは労基法違反です。

komame520
質問者

お礼

ご回答ありがとうございます。 確かにおっしゃるとおり、労基法違反ですね、考慮してませんでした。 8時間未満の文は別途考えて見ます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlのif文かcase文で複数条件を指定する

    mysql初心者です。 3つのテーブルでスケジュールの仕組みを考えていますが Staff→スタッフデータ id  name 1   田中 Sch1→日付出勤 id  start_time  end_time  date  flg 1   9:00   22:30   2014-03-17   1 Sch2→曜日出勤 id  start_time  end_time  dateW 1   9:00   22:30   1 ※dateWは曜日(0~6) 日付出勤優先なので、なければ曜日出勤を出力します。 たとえば、 田中さん (1)日付登録:2014-03-17(月) 09:00-18:00 (2)曜日登録:1(月) 10:00-19:00 (3)曜日登録:2(火) 09:00-18:00 PHP側でやるなら、 for (一週間分回す) { if (Sch1[date]) { 日付設定出力 }else{ 曜日設定出力 } } 全出力した(日付、曜日)データを一個の配列に入れて、start_timeでソートするかで出力する。。 Mysqlのif文かcase文分でどう書いたらいいですか? 説明が下手ですが、 どなたかご存知の方がいらっしゃれば是非、ご教授ください。

    • ベストアンサー
    • MySQL
  • Mysql select文で取得した値をカラム保持

    勤務時間管理アプリを作っています。 深夜時間残業と普通時間残業を10:00を境に 分けてカラムを用意しています。 以前、投稿されていた記事を参考に下記のselect文で 深夜残業時間を取り出すことは出来ました。 ただ取りだした値を準備したカラムに保持出来ませんでしょうか? SELECT id,start_time,end_time,rest_time ,CASE WHEN end_time<'22:00:00' THEN NULL WHEN TIMEDIFF(TIMEDIFF(end_time,start_time),rest_time)<='08:00:00' THEN NULL ELSE TIMEDIFF(TIMEDIFF(end_time,'22:00:00'),rest_time) END AS SHINYA start_time(開始時間) end_time(終了時間) rest_time(休憩時間) SHINYA(深夜時間残業 カラムを前もって準備ここに保存)

  • ソートした値をから別の条件でソートしたいのですが・・

    MYSQL5.1を利用しております。 ソート条件で悪戦苦闘しておりまして、何を見てもわからなかったため質問させて頂きます。 ================================================= 【hogehogeテーブル】 ID  start_time      end_time 1   2009-8-18 11:00:00  2009-8-18 16:00:00 2   2009-8-18 10:30:00  2009-8-18 14:00:00 3   2009-8-18 09:00:00  2009-8-18 18:00:00 4   2009-8-18 12:00:00  2009-8-18 20:00:00 5   2009-8-18 13:00:00  2009-8-18 20:00:00 ================================================= 【SQL文】 SELECT  * FROM hogehoge ( start_time <= NOW() AND end_time >= NOW() ) DESC, ( start_time > NOW() AND end_time >= NOW() ) DESC, ( start_time < NOW() AND end_time <= NOW() ) DESC; ================================================= DESCの1回目は今の時間がstart_time と end_time の間に入っている場合、 DESCの2回目は今の時間がstart_time と end_time よりも大きい時間の場合、 DESCの3回目は今の時間がstart_time と end_time よりも小さい時間の場合です。 修正したい点は、 DESCの1回目をしたときに、その後すぐ、DESCをしたものに対してのみstart_timeの大きい順(降順)に並べ替えたいのです。 イメージとしては下記のようなものでしょうか・・ ================================================= SELECT  * FROM hogehoge ( start_time <= NOW() AND end_time >= NOW() ) DESC, (上でDESCしたものに対してstart_timeの降順に並び替え), ( start_time > NOW() AND end_time >= NOW() ) DESC, ( start_time < NOW() AND end_time <= NOW() ) DESC; ================================================= 色々試してはみたのですが、文法のエラーが出現し、検索してみても本を読んでみても参考に出来るもの見つからず困り果てております。 どうか皆様のお力添えを宜しくお願い致します!

    • ベストアンサー
    • MySQL
  • 指定時間になってもブレイクしない

    Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(time_parameter[0], time_parameter[1] - 1, time_parameter[2], time_parameter[3], time_parameter[4], time_parameter[5] + 10); Time = calendar.getTimeInMillis(); System.out.println("Time"+Time); for (;;) {   if (Time == System.currentTimeMillis()) {     System.out.println("break");     break;   } } このようにして指定した時間になったらブレイクさせようとしていますが 何度か実行していますが, ブレイクしない時がちょくちょくあります. Time = calendar.getTimeInMillis();と System.currentTimeMillis()を 表示させて見ましたが, どうやらミリ秒の桁で誤差があるようで ブレイクしません. 指定時間になったら確実にブレイクさせたいのですが, どうすればよいでしょうか?

    • ベストアンサー
    • Java
  • <PHP>2つの条件を満たす switch 

    下記のようなソースの場合は条件が一つしか指定できません。田中さんとかの苗字だけではなく、例えば、東京・田中さんであれば”ペットはいぬ”と言った感じ値を返したいのですが・・・ caseの横にandなどを使えば言いのかなとは思ったのですが、HP等が見つかりません。初歩的な質問だとは思いますが、ご指導をお願いします。 --------------------- <?php $type = "田中さん"; switch ( $type ) { case "鈴木さん": echo 'ペットはいぬ'; break; case "佐藤さん": echo 'ペットはきじ'; break; case "田中さん": echo 'ペットはさる'; break; } ?>

    • ベストアンサー
    • PHP
  • 時間の計算によってある行を取り出す

    MySQLバージョン4.1.16を使っています。 id start_time1 end_time1 start_time2 end_time2 という時刻が入っている項目があったときに、(時刻はdate("y/m/d H:i:s")という形式です) (end_time1 - start_time1)の値と(end_time2 - start_time2)の値の合計が 例えば5時間30分以上だった場合にのみ、その行を取り出すというSQL文は どのように書けば良いのでしょうか? 合計が24時間以上だった場合も考慮に入れないといけないので難しそうな気がしますが、、

    • ベストアンサー
    • MySQL
  • 昨日を基点に30日間の対象レコードを表示したい

    php と mysqlで作ろうと考えてます。 ・内容 昨日を基点に30日間の対象レコードを表示したいです。 その際、降順表示を考えてます。 DBのテーブル date |name|counter 2013-04-20 |田中|2 2013-04-30 |佐藤|4 2013-05-10 |鈴木|8 2013-05-15 |近藤|11 2013-05-22 |藤木|10 2013-05-23 |藤原|10 やりたいことの結果イメージ(phpの処理をした結果) 実装日 2013-05-23 の場合 1位:近藤 2位:藤木 3位:鈴木 4位:佐藤 *補足 昨日から30日間のため 「田中」と「藤原」 は順位から対象外となります。 参考サイトがございましたらアドバイスいただければ幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • MySQL SELECT WHERE 条件 大量

    mysqlのSELECT文でWHEREを使い条件を指定する時、指定する条件が数十件~数百件合った場合どうすればよいのでしょうか? 例えば、 以下のような感じで名前カラムと住所カラムがあったとします name  address 田中  東京都 鈴木  大阪府 佐藤  北海道 加藤  沖縄県 中村  群馬県 小林  岐阜県 高橋  東京都 渡辺  大阪府 伊藤  北海道 山本  沖縄県 斎藤  群馬県 阿部  岐阜県     ・     ・     ・ そこで、東京都と大阪府と北海道の人だけをSELECT文で選択したいのですが、 WHERE `address` = '東京都' OR `address` = '大阪府' OR `address` = '北海道' というように、一つづつ記述していかなければならないのでしょうか? この例の場合だと3件だけの指定ですが、もしもっと膨大な量を指定したいとなったとき、とても効率が悪いように思います。 なにか良い方法はないのでしょうか? ちなみにPHPからMySQLを利用しているのですが、現在 $where = array(); foreach($address as $value){ $where[] = "`address` = '${value}'"; } $where = implode(' OR ', $where); としておいて、 mysql_query("SELECT * FROM table WHERE ${where}"); とする方法しか思いつきません。 もっとスマートな方法があれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • VBAで複数条件の検索結果を取得したい

    ExcelのVBAで複数条件の検索をおこない、出てきた結果を変数に入れて 操作をおこないたいです。 findでは複数条件はできないようですが、ループでセルの検索をおこなって if文で見ていくしか方法はないのでしょうか。 advancedfilterも調べてみましたが、検索結果を取得する方法がわかりませんでした。 アドバイスをお願いいたします。 ・Excelデータ 名前、住所、年齢、性別 田中、東京都、20、男 佐藤、北海道、30、男 渡辺、東京都、20、女 ・検索条件 住所:東京都 かつ(and) 年齢:20 ・検索結果 田中、東京都、20、男 渡辺、東京都、20、女 となった場合、上記検索結果を変数に入れて操作したいです。 ※各項目はExcelの各列に入っています。

  • swith文について

    こんにちは。 switch文を用いて分岐を行っています。 以下のプログラムは、whileの無限ループ内にswitch文の分岐を行っています。while内にrecvfrom関数(ソケット通信用関数)を用いています。recv_Buf配列内をヌル文字まで走査し、文字列の長さによって分岐をしています。 while内のrecvfromによって、他端末から文字列を逐次受信しているのですが、この場合、switch文ではなくif文による分岐を行うべきなのでしょうか? また、breakを行うことで、whileの無限ループまで抜けることになるのでしょうか? switchの場合、breakを用いないと、実行したくないところまで実行してしまう可能性があるので、breakは必要だと思い以下のプログラムにしました。 よろしくお願いいたします。 [プログラム] while(1){   recvfrom(s2, recv_Buf, (int)sizeof(recv_Buf) - 1, 0, (SOCKADDR *)&from, &fromlen);   while(recv_Buf[len]!='\0')   len++;   switch(len){    case 3:     if(memcmp(recv_Buf,"END",3) == 0){      //処理     }     break;    case 5:     if(memcmp(recv_Buf,"START",5) == 0){      //処理     }     break;     case 12:     case 13:     case 14:     case 15:      if(memcmp(recv_Buf,"SEND_PACKET",11) == 0){       //処理      }      break;    } }

Rubix22の2Rが特定のPCで使えない
このQ&Aのポイント
  • Rubix22をDELLのゲームPCに接続した際、2Rのマイクが全く使えない問題が発生しました。
  • 別のPC(東芝、レノボ)に接続した場合は問題なく使用できました。
  • 解決策が見つからず、購入前に問題を解決したいと考えています。
回答を見る