0

私のデータベースには、以下のようなテーブルがあります

+----+-----------+----------+
| id | fk_id     | duration |
+----+-----------+----------+
|  1 |        23 | 00:00:31 |
|  2 |        23 | 00:00:36 |
|  3 |       677 | 00:00:36 |
|  4 |       678 | 00:00:36 |
+----+-----------+----------+

上記の表では、列期間のデータ型は time です。

以下はそのテーブルのスキーマです

Create Table: CREATE TABLE `durationof` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fk_id` int(11) NOT NULL,
  `duration` time NOT NULL,
  PRIMARY KEY (`id`))

ここで、クエリの期間列に常に追加したいのですが、どうすればよいですか?

sum 関数と同様に、すべての mysql 時間値を追加する関数があります。

durationof; から addtime(duration) を選択してみました。

しかし、それは機能していません。

4

2 に答える 2

2

私は@Corbinの元の答えに完全に同意しません。タイプTIME下に文書化されているように:

TIME値の範囲は'-838:59:59'から'838:59:59'です。時間の部分は非常に大きくなる可能性があります。これは、このTIMEタイプを使用して時刻(24時間未満である必要があります)だけでなく、経過時間または2つのイベント間の時間間隔(24時間をはるかに超える場合もある)を表すことができるためです。時間、または負の値)。

このようなすべての間隔の合計を取得するには、次のようにします。に変換し、合計を取得してから、再度変換します。

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) FROM durationof

sqlfiddleでそれを参照してください。

于 2012-11-17T13:47:00.207 に答える
2

合計を行うために秒に変換する代わりに、時間を秒単位で保存したくなるでしょう。

特に、TIME を格納する代わりに、何らかのタイプの整数 (int、smallint、bigint など) を格納できます。測定の最小単位を特定し、それに格納します。

たとえば、秒単位の精度が必要な場合は、期間を秒単位で保存します。たとえば、4545 秒間保存できます。ミリ秒を気にする場合は、データをミリ秒として扱います。つまり、4500045 秒間保存されます。

その後、通常の集計に戻ります。


または、TIMEに固執したい場合は、egyvalの回答を使用してください。

特定の状況によって、TIME と整数のどちらを使用するのが適切かが決まる可能性があります。

于 2012-11-17T12:42:11.807 に答える