2010-12-17 16 views
0

私はすぐに説明しましょう。私は訪問者を管理するためのアプリケーションを持っています。時間をOracleに保存する

私たちは訪問の開始日があります(訪問は1日のみ可能です)。 ツアーの時間、グループが昼食を取る時間、グループがプレゼンテーションを行う時間などを追加できます。すべての時間は訪問の開始日をとり、それに応じて時間を追加します。

シンプルコード:

// set tour time in tour table 
    $y->setTourTime($visit->getVisitDate("Y-m-d") . $tourTime); 
    // can have many presentation 
    $p->setPresentationTime($visit->getVisitDate("Y-m-d") . $tourTime); 

だから私は、複数のテーブル間で多くのタイムスタンプを持っています。しかし、私が訪問エンティティの開始日を変更することにした場合、私は変更する必要がありますすべて関連するテーブル(ツアーガイド、講演会など)のタイムスタンプです。これは

です

私が望むのは、訪問表に2010-10-10のような訪問日があることです。そして、講義のテーブルでは、日付ではなく時間だけを保存するためのテーブルなどを案内します。あなたはどうしますか?文字列、つまり「10:00」として保存するだけですか?

ありがとうございます。 :-)

答えて

6

あなたはいくつかの可能性があります。私は仕事に最も適したデータ型を持つことを好みます。時代とともに計算最高DATE、TIMESTAMPおよびINTERVALを使用して行われているので、私はこのようなものを使用したい:あなたがここにINTERVAL DAY TO SECONDデータ型についての詳細を読むことができ

SQL> create table visits 
    2 (startdate    date 
    3 , starttime_tour   interval day(0) to second(0) 
    4 , starttime_lunch  interval day(0) to second(0) 
    5 , starttime_presentation interval day(0) to second(0) 
    6 , constraint visits_ck1 check (startdate = trunc(startdate)) 
    7 ) 
    8/

Table created. 

を:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements001.htm#SQLRF00207

そしてここにはありますあなたはそれから挿入し、選択する方法例:

SQL> insert into visits 
    2 values 
    3 (trunc(sysdate) 
    4 , to_dsinterval('0 09:00:00') 
    5 , to_dsinterval('0 12:00:00') 
    6 , to_dsinterval('0 13:00:00') 
    7 ) 
    8/

1 row created. 

SQL> select startdate 
    2  , starttime_tour 
    3  , starttime_lunch 
    4  , starttime_presentation 
    5 from visits 
    6/

STARTDATE   STARTTIME_TOUR  STARTTIME_LUNCH  STARTTIME_PRESENTATI 
------------------- -------------------- -------------------- -------------------- 
17-12-2010 00:00:00 +0 09:00:00   +0 12:00:00   +0 13:00:00 

1 row selected. 

そして計算は現在、非常に簡単です:

SQL> select startdate 
    2  , startdate + starttime_tour as tour 
    3  , startdate + starttime_lunch as lunch 
    4  , startdate + starttime_presentation as presentation 
    5 from visits 
    6/

STARTDATE   TOUR    LUNCH    PRESENTATION 
------------------- ------------------- ------------------- ------------------- 
17-12-2010 00:00:00 17-12-2010 09:00:00 17-12-2010 12:00:00 17-12-2010 13:00:00 

1 row selected. 

これが役に立ちます。

よろしく、 ロブ。

+0

ありがとうございました! :D優れています。 :-) – Flukey

0

時間として操作したい場合は、2つの日付フィールドを作成する方が良いかもしれません。 1つは訪問日を保持し、もう1つは一般的な日付(2000年1月1日または一貫性のあるものである&のもの)が付いたツアー時間を保持します。ツアー時間の日付部分は無視しますが、文字列を時間値に変換せずに必要なものです。

関連する問題