0

ユーザーが時間範囲を指定できるようにしたい状況があります。時間は、特定の週に存在する相対的な範囲です。したがって、ユーザーは月曜日の午後 5 時から火曜日の午前 1 時までを選択できます。「人の勤務シフトは何時ですか」のようなものだと考えてください。

私の最初の反応は、「相対」時間を保存できるということです。したがって、週が月曜日の 00:00:00 に始まると仮定すると、月曜日の正午は 86400/2= 43200として示されます。タイムゾーンの扱いが少し難しくなるので、私はこの方法があまり好きではありません。

これを行うための「最良の」方法はありますか(または単に良い方法ですか)?MySQL には、これを具体的に扱う何らかのデータ型がありますか?

この「Perl」と「MySQL」にタグを付けましたが、これはこのアプリケーションで使用するためです。ただし、答えは技術的にそれらのいずれかに固有である必要はありません。

4

2 に答える 2

0

最良の答えは、下流のデータをどうするかによって多少異なります。

しかし、ハックを避けて、単純なアプローチをとることをお勧めします (私の MySQL はさびているので、テーブル構文 Sybase です。申し訳ありません)。

CREATE TABLE weekday_ranges (
    start_dow    int,  -- 0-6 or 1-7 depending on what's easier downstream 
    start_hour   int,  -- 0-23
    start_minute int,  -- 0-59
    -- Add seconds/micorseconds as needed
    end_dow      int,
    end_hour     int,
    end_minute   int
)

別の方法として、開始オフセットと終了オフセットの両方で、日曜日の 00:00 からのオフセット (秒単位) を格納する方法があります。これには利点があります (たとえば、範囲比較は、複雑な式ではなく単なる<and>演算子です)。

于 2012-04-08T01:28:24.583 に答える
-1

開始時刻と終了時刻をそれぞれ1つのフィールドに保存すると(部分に分割するのではなく)、フィールドにインデックスを付けることができます。そうでなければ、大きな違いはありません。(パーツをPerlとSQLのどちらで1つの値にアセンブルするかを選択することになります。)

確かに解決できないタイムゾーンの問題があります。DSTからの切り替え中に、最初の午前2時と2番目の午前2時を区別する方法がありません。入力には、それを処理するのに十分な情報がありません。

于 2012-04-08T01:54:45.067 に答える