• ベストアンサー
  • すぐに回答を!

MySQLのDatetime型の引き算

ある機械の1日当たりの処理数を計算したいと思います。 Datetimeの引き算がうまくいかないので、解決方法を教えてください。 1日当たりの処理数は下記の式で計算できます。 1日当たりの処理数=期間内処理数÷((現在日時-作業開始日時)÷(60×60×24)) ※現在日時-作業開始日時で期間の秒数を計算 それを1日の秒数=86400秒(60秒×60分×24時間)で割る。 ------------------ 環境 MySQL:5.0.77 ------------------ テーブル: test カラム :num(INT型),start_date(DATETIME型) ※numは期間内の機械の処理数です。 まず、上記の1日当たりの処理数の数式をSQL文に反映させてみました。 SELECT num , num/((now()-start_date)/86400) as shorisu FROM test 結果は表示されるのですが、かなり大きな数値になって出てきてしまいます。 WEBで情報を検索したところ、DATETIME型を直接減算すると求める結果にならないことはわかりました。 MySQLのページ(11.5. 日付時刻関数) http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html を見てみましたが、どの関数を使えばよいのかいまいちわかりません。 now()-start_dateの部分が正しい値を返すようになれば良いのですが、どのような式を書けばよいのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数806
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • osamuy
  • ベストアンサー率42% (1231/2878)

select time_to_sec( timediff( now(), '2011-12-01 0:0:0' ) ); mysql Ver 14.12 Distrib 5.0.51a

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 求める答えになりました。 このような方法があるんですね。 いろいろ情報を調べても良い答えが見つからなかったので助かりました。

関連するQ&A

  • datetime型で日付計算ができません。

    開始日時(start_date)の20日を経過したレコードを削除したいのですがSQLで行う方法がわかりません。 start_dateはMySQLのdatetime型です。 select * from test where start_date + 20days < now() な感じ消せると思ったのですが調べても方法が 見つかりませんでした。

    • ベストアンサー
    • MySQL
  • MySQLのDatetime型の検索方法

    MySQLのDatetime型で 時間部分が00:00:00のデーターだけを抽出する方法を教えてください。 MySQLのデータ(列:Datetime型) 2011-12-01 00:00:00 2011-12-01 20:15:45 2011-12-01 20:46:45 2011-12-02 00:00:00 2011-12-02 11:11:11 2011-12-03 22:22:22 2011-12-04 00:00:00 このようなデータの中から時間部分が「00:00:00」のものを抽出したいと思います。 求める結果は 2011-12-01 00:00:00 2011-12-02 00:00:00 2011-12-04 00:00:00 です。 期間で抽出するのであれば SELECT * FROM `テーブル名` WHERE date>='2012/12/05 00:00:00' AND date<='2012/12/07 23:59:59' のようなクエリで良いと思うのですが、「00:00:00:」が含まれるものだけを抽出しようと思うとうまくいきません。 LIKE 00:00:00 でできるかもしれないと思いましたがダメでした。

    • ベストアンサー
    • MySQL
  • MySQLのDateTimeにPHPで値セットは?

    初歩的な質問ですみません。 MySQLにとあるテーブルがあって、 その中に 更新日時 という DATETIME 型のフィールドがあるのですが、 insert でレコードを追加する際にそこに現在日時をセットしようとして、 恥ずかしながらその方法がわかりません。 $sql = sprintf('INSERT INTO %s SET %s="%s", %s="%s"',         'tmp',         'mailAddr', e($mailAddr),         'update', date('Y/m/d H:i:s')); mysql_query($sql); とか、 $sql = sprintf('INSERT INTO %s SET %s="%s", %s=cast(now() as datetime)',         'tmp',         'mailAddr', e($mailAddr),         'update'); mysql_query($sql); とか、いろいろ調べて試してみたんですけど...。 上記のように、insert into xxx set&#65374; を使う場合を知りたいです。 すみません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLで日時データをdatetime型に変換

    現在、MySQLにて日時情報を文字列として格納しているのですが、 日時の計算を行うために、datetime型に変換した上で 格納しなおしたいと考えています。 どのようにすれば良いでしょうか? よろしくお願い致します。

  • DateTime型に時間だけを加算したい

    こんばんは。 phpで時間を処理したいと思っているのですが、 DateTime型が便利なので使っています。 時間だけを加算したい場合はどのようにすればよいのでしょうか? $date = new DateTime(); としたときに時間 "01:23:34" を加算したいのですが 日時を加算とかは事例が出てくるのですが時間だけと なると分かりません。 教えていただけないでしょうか。

    • ベストアンサー
    • PHP
  • 秒数をDATETIME型に変換して足したい

    MySQLバージョン4.1.16を使っています。 time1というDATETIME型に秒数(1日以上ある)を加えたいのですが どのようなSQL文になるのでしょうか? UPDATE sample SET time1 = time1 + 秒数 このような感じになると思うのですが、 秒数のところをどう変換したらよいのかわかりません。

    • ベストアンサー
    • MySQL
  • DATETIME型からUNIX時間を求める方法

    現在、MYSQL、DATETIME型 YYYY-MM-DD HH:MM:SS からUNIX時間を求める際に、気軽に質問出来る詳しい方が知り合いにおらずPHP学習中で知識が乏しいため、YYY-MM-DD HH:MM:SS をスペースで分割、をハイフンで分割、HH:MM:SSをコロンで分割、その後、mktimeに当てはめてUNIX時間を求めています。 他に簡単にDATETIME型からUNIXTIME求める関数などがありましたらご教示頂けましたら嬉しいです。 それとも、計算が必要な日時をMYSQLに格納する場合はINSERTする場合にUNIX時間でINSERTし、表示が必要な場合に、DATE関数等で日時として表示する方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • datetime型、未入力時の日時表示について

    PHP&MySQL初心者です。 同窓会の申し込みフォーム作成していますが、日時表示について質問です。 参加希望日時をカレンダー入力させて、データベースに登録しています。 日時はカラムを分けずにまとめてdatetime型にしています。 ■第一希望 [カレンダー入力](年月日時分をまとめて) ■第二希望 [カレンダー入力](年月日時分をまとめて) →データベース(mySQL)には、 datetime型「2016-01-05 02:50:00」形式で登録。 カレンダー入力せずにINSERTされたとき、datetime型だと、 「0000-00-00 00:00:00」で登録されますが、 この値を、date('Y年n月j日 g時i分', strtotime(カラム値)); で読み出すと、「1970 年 1 月 1 日 00:00:00」と表示されます。 このままではまずいので、単純に空欄としたいのです。 カレンダー入力されなかったとき、つまり、「0000-00-00 00:00:00」で登録されているとき、 日時表示を空欄にするスマートな方法はありますか?

    • ベストアンサー
    • PHP
  • datetime型の秒を切り捨てるには?

    PHP&MySQLで、日付時間入力のフォームを作成しています。 日付時間表示は、「2015年11時4分 7:00」という表示フォーマットにしたいのです。 日付時間入力フォームは、 https://www.softel.co.jp/blogs/tech/archives/4294 こちらを参考にして、datetimepickerのカレンダー入力に、時間入力を組み合わせたデモサンプルを利用しています。 年日時間を個別にデータベース管理する必要はなく、日時分まで管理したいことから、データベースのほうはひとつのカラムにdatetime型で定義しました。 datetimeなので、「2015-11-04 07:00:00」で格納されます。 そこからこの値をとりだして、画面表示させたいのですが、 「2015年11時4分 7:00」で表示させるために、秒を切り捨てたいのですが、 この場合どうすればいいのでしょうか? ************************** mySql:ver5.6 PHP:ver5.4 phpMyAdmin 3.4.9 型:datetime

    • ベストアンサー
    • PHP
  • MySQL TIMESTAMP型をJavaで取得

    MySQL TIMESTAMP型をJavaで取得すると、秒の部分に小数点が勝手に加えられるのですがそういうものなのでしょうか。 MySQLの値と矛盾しているように思うのですが、お教えください。 (1) MySQLで表示  mysql > select * from &#65374;; +-------+---------------------+ | title | renew_date | +-------+---------------------+ | test | 2014-03-23 21:09:57 | +-------+---------------------+ (2) Javaで表示 … ResultSet rs = stmt.executeQuery("SELECT * FROM &#65374;); while(rs.next()) {   renew_date = rs.getString("renew_date");     } System.out.println("renew_date: " + renew_date); このSystem.out.printlnでは、 +-------+---------------------+ renew_date: 2014-03-23 21:09:57.0 +-------+---------------------+ と出ます。 (1)と(2)にで小数点(最後の秒の部分、 .0 )が異なります。