• 締切済み

【MySQL】時間を格納したり計算するためには?

○時△分□秒という“時刻”ではなく ○時間△分□秒という“時間”を格納したり足し算したりしたいのですが テーブル作成時にそのような型はないでしょうか? 時間と分と秒を別々のintに格納して 加算時、分や秒が60を超えたら時間に1を加えて・・・ みたいな面倒を考えている次第ですが もし良い手法がありましたらご教示願います。 宜しくお願い致します。

  • MySQL
  • 回答数2
  • ありがとう数1

みんなの回答

noname#86752
noname#86752
回答No.2

日本MySQLユーザ会のサイトにある比較的新しいバージョンの日本語マニュアルによると TIME 値の範囲は '-838:59:59' から '838:59:59' の範囲です。時の部分がこんなに大きいのは、TIME 型は一日すなわち24時間以内の時刻を表現するのに用いられるだけではなく経過時間や二つの事象の間隔 (どちらも24時間を越えたり、負の数になる場合もあります)を表現することもあるからです。 だそうです。この範囲の値ではだめですか?

Claudia
質問者

お礼

データベース自体初心者なのですが、 テーブルから時間の値をとりだして単純に足し算すると 時間部分だけ加算され、分と秒が無視されてしまいまして。 100:00:00h前後の値を格納して、 それらを、条件をもとに集計をとりたいと思っておりますので 840hが限度となると難しいかもしれません。 やはり整数で取り扱うほかないのでしょうか。 お返事ありがとうございました。

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

時間分秒に分ける必要もなく 経過秒として管理するのが普通ですよね? 通常の時間だって基準日時からの経過秒ですから

関連するQ&A

  • 経過時間(hhmmdd)をDATE型には格納できない?

    Oracle9iで、前回記録時刻からの現在までの経過時間を、 hhmmdd(XX時間XX分XX秒)の形で格納する処理をCで作ることが必要になりました。  そこで質問なのですが、DATE型に0000年00月00日3時14分30秒のように、差分の経過時間を入れることはできないのでしょうか?  一度この方法(年月日時分秒を%4d%02d%02d%02d%02d%02dで格納してTO_DATEで'YYYYMMDDHH24MISS'の形で格納しようとしました)でデータを設定して試したところINSERT ERROR(月の値が不正)になってしまいました。DATE型ではこのようなデータの格納は無理なのでしょうか? また、もし文字列として格納しないとだめかもしれないのであれば、テーブルのつくりなおしも考えています。 (なお、現在時刻を格納するのはだめと言われています) それともし、類似の質問や参考ページがあったら教えていただけますでしょうか。DBを触るはほとんど初めてというレベルですが、よろしくお願いします。

  • PHPにおける時間計算、時間足し算に関して

    PHPを用いた時間の足し算方法についてお教えいただきたくお願いします。 12:30:00 (時間、時刻ではない)+ 12:30:00が25:00:00と表示されるようにしたい。 例えば、日ごとの勉強時間○○時間△△分□□秒を特定の日にち間での総勉強時間を算出しようとして、以下のようにコーディングしました。 なお、下記におけるleave,enterは開始時刻(HH:MM:SS)、終了時刻の文字列をstrtotime関数を用いて時刻変換したものを用いています。 24時間以内であれば、問題なく表示されるのですが、1日(24時間)以上の数値となると日にち分の時間(24、48時間等)が引かれた値が出力されます。dateの書式によるためと思われますが、36:50:30(現在の出力は12:50:30)と単純に足し算の結果を出力させるためにはどのようにコーディングすればよろしいでしょうか? よろしくお願いいたします。 $sum = 0; for($i=0; $i<$k; $i++){ $time_diff[$i] = $leave[$i] - $enter[$i]; $sum = $sum + $time_diff[$i]; } $sum = $sum + strtotime("0:0:0"); //localtimeを補正 $sum = date("H:i:s",$sum); print("累積時間:" .$sum. "<br>"); 場合にとっては総時間を秒で求める方法をご教示いただいても結構です(割り算で時間、分、秒として出すこともできますので)。

    • ベストアンサー
    • PHP
  • VB2008で日付と時間の計算

    教えて下さい。 VBで日付と時間の足し算をしたいのですがやり方がわかりません。 フォームに6つのテキストボックスを配置し、6つのテキストボックスには それぞれ日・時・分の数値を入力します。 例えばヤフーオークションの終了時刻を計算したい場合、 TextBox1~3に現在の日時を入力し、TextBox4~6に残り時間を入力します。 現在時刻 [4] 日 [17] 時 [44] 分 残り時間 [3] 日 [6] 時間 [30] 分 この数値の足し算結果をメッセージボックスに終了時刻として表示させるようにしたいのですが、やり方が分からず困ってます。 教えていただけないでしょうか。

  • VBで時間計算

    教えてください。 VBで時間の足し算をしたいのですが、方法が分かりません。 例えば、毎日の通信時間の合計を出したい場合ですが、 00:15:30(15分30秒) 00:45:31(45分31秒) の日があったとします。 この合計は01:01:01(1時間1分1秒)になると思います。この計算ができずに困っています。 教えて頂けないでしょうか。

  • EXCELの時間計算

    セルA1に、「9:43:20」と時刻が入力されています。 セルB1に、「3.2」と時間(分)が入力されています。 セルC3には、A1の時刻から,B1の時間が経過した後の時刻を 表示させたいです。 ※B1の「3.2」を3.2分(3分12秒)として計算したいです。 C3の計算式を教えてください。 ※計算した結果の時刻は,9:46:32です

  • 時間計算について

    いつもお世話になっております。 今回の内容は私にとってとても厄介で是非皆様のお力を お借りしたいと思っているのですが。 さて内容です。 項目 「設定時間」・・・「秒」単位:3桁 「処理数」・・・・処理する数:6桁 「設定時間」×「処理数」で、総時間(秒)を割り出し ます。 「開始時間(時:0~23)」・・・Comboboxで手入力。 「開始時間(分:00~30)」・・・Comboboxで手入力。 (どちらもランダムで設定可能。) 「終了時間(時)」 「終了時間(分)」 この2項目に開始時間に上記の計算で割り出した総時間を加算した結果を表示させたいのですが。。。 力量不足でどうにも思いつきません。 よろしくお願いします!

  • 計算機誤差

    ある時刻データの単位が日で表されている場合に、この値を計算機誤差がなく時分秒に変換するにはどうしたらよいでしょうか? 例えば、9時47分30秒は日で表すと a = 0.4079861111111111111111 ですが、この値を以下のように時分秒に変換した場合 9時47分29秒となってしまいます。 hour = (int)(24*a) min = (int)(((24*a)-hour)*60) このような誤差がないように計算するにはどうしたらよいでしょうか?教えてください。

  • 実働時間の計算(エクセル)

    こんにちは エクセルで出勤簿を作りたいのですが、上手く行きません。 やりたいことは、こんな感じです。 始業時刻 終業時刻 休憩時間 実働時間(分) 09時53分 18時08分 1時間14分 421分 実働時間を分で出したいのですが、うまくできません。 どなたか教えていただけないでしょうか? よろしくお願いします。

  • Excelにて時間の合計を計算

    マクロなどは使えないoffice初心者です。 タイトルの通りなのですがExcelにて時間(時刻ではない)の合計時間の計算の仕方を知りたいのです。 例として 00時間00分32秒23 00時間00分21秒45 00時間00分18秒53 というような1/100秒まである時間(文字列)のトータル時間を計算する事は可能なのでしょうか? Excel初心者には難しいのでしょうか? なるべくマクロなどを使わずに済む方法があれば知りたいです。 なお、Excelのバージョンは2003および2007です よろしくお願いします。

  • String配列を扱うアルゴリズムについて

    よりパフォーマンスの良いアルゴリズムが、 ございましたらご教示下さい。 数レコード分のDBテーブルデータが格納されたString[][]型が存在するとします。 配列の要素は、String[行(フィールド)][列(カラム)]です。 ここで、全レコード中の列ごとの最大文字列長を int[]型に取得したいと思います。 そうした場合、自作した下記の処理よりも、 よいパフォーマンスを得られるアルゴリズムがございましたら、 ご教示願いたいと思います。 ※処理前提条件 ●String[][]型変数に、過不足無くテーブルデータが格納済みであるとします。 ●配列の第一(行)・第二(列)要素の最大値は取得済みであるとします。 ////////////// // 変数定義 // ////////////// String[][] tableData; ← テーブルデータ格納済み(過不足はありません) int 行数 = 全行数(取得済み); int 列数 = 全列数(取得済み); //列毎の最長文字列値を格納する。 int[] maxLen = new int[列数]; ////////// // 処理 // ////////// //列の個数分、処理を繰り返す for(int i = 0; i < 列数; i++) {   //行の個数分、処理を繰り返す   for(int j = 0; j < 行数; j++) {     //NULLを回避する     if(tableData[i][j] != null) {       //int配列に格納済みの数値より大きければ、改めて格納する       if(maxLen[i] < tableData[i][j].length()) {         maxLen[i] = tableData[i][j].length();       }     }   } } 以上です、どなかお知恵をお貸し頂けませんか。 宜しくお願い致します。

    • ベストアンサー
    • Java