8

Oracle 10g データベースに日時 (日付だけでなく時間も) を格納するために使用されるデータ型はどれですか? 「 Oracle 10gの日付データ型は日付時刻を格納できます」という(誤っている可能性があります)ところを読んだことがありますが、そうしようとしてもうまくいかないようです。

DATE データ型は日時データ型です。日付と時刻を格納します。日付部分は、紀元前 4712 年 1 月 1 日からの日数に基づいています。時間部分は、真夜中からの秒数に基づいています。リンク

次のSQLを使用して、Javaをフロントエンドとして、Oracleターミナルで直接試しました。

insert into discount 
values(7, 'Code', 12.5, to_date('11-AUG-2012 06:05:23', 'dd-mon-yyyy hh:mi:ss'), 
to_date('20-AUG-2012 07:50:23', 'dd-mon-yyyy hh:mi:ss'))

それは動作しますが、(どちらの場合も) Oracle は単純に時刻部分を無視し、エラーなしで SQL で指定された日付のみを挿入しますか?

Oracle 10g で日時を格納するために使用されるデータ型はどれですか? ですかTimeStamp

4

2 に答える 2

11

Oracleの ADATEには、常に日コンポーネントと時間コンポーネントがあります。表の最後の 2 つの列DISCOUNTが として宣言されていると仮定すると、 DATEOracle が単に時間コンポーネントを無視しているとは考えにくいでしょう。

時間要素が無視されていると思われる理由は何ですか? 私の推測では、次のようなクエリを実行してデータをチェックしていると思います

SELECT *
  FROM discount

SQL*Plus、SQL Developer、TOAD、またはその他の GUI から。これを行うと、デフォルトでは、表示される日付には時間要素ではなく日要素のみが含まれます。これは、時間要素が破棄されていることを意味するものではありません。代わりに、NLS_DATE_FORMAT時間コンポーネントを表示しないデフォルトを使用した結果です。クエリで明示的に実行することにより、時間コンポーネントを強制的に表示できTO_CHARます(列の名前を推測していることに注意してください)

SELECT discount_id, 
       discount_type, 
       discount_amt, 
       to_char( discount_start_date, 'MM/DD/YYYY HH24:MI:SS' ),
       to_char( discount_end_date, 'MM/DD/YYYY HH24:MI:SS' )
  FROM discount

または、デフォルトを変更することによってNLS_DATE_FORMAT

ALTER SESSION SET nls_date_format = 'MM/DD/YYYY HH24:MI:SS';
SELECT *
  FROM discount;
于 2012-08-09T02:24:59.573 に答える