日付データ型の値には常に日付と時刻のコンポーネントが含まれています。日時値の時間部分のみを指定した場合、日付部分のデフォルトは現在の月の最初の日になります。
Here is one of the places (7th paragraph)この動作が文書化されているOracleのマニュアル。
もリテラルTIME
が文書化されていませんし、使用して時間だけを格納する必要がある場合TIME
データ型は、日付の部分なしで、(10407
(日時TIMEデータ型の作成)イベントを経由して有効にする必要があります)。
ここでは、time
リテラルとtime
データ型を使用した小さなデモンストレーションがあります。しかし、再びそれは文書化されておらず、サポートされていない機能です。
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
あなたは10407
イベントを有効にせずにリテラルの時間を使うことができますが、10407
イベントを有効にする必要がありtime
データ型の列を定義することができるようにするために:
SQL> create table time_table(time_col time);
create table time_table(time_col time)
*
ERROR at line 1:
ORA-00902: invalid datatype
-- enable 10407 event
SQL> alter session set events '10407 trace name context forever, level 1';
Session altered.
を今私たちが作成することができますtime
のデータ型を持つ表:
SQL> create table time_table(time_col time);
Table created.
SQL> insert into time_table(time_col)
2 values(time '11:34:00');
1 row created.
SQL> select * from time_table;
TIME_COL
---------------
11.34.00 AM
SQL> alter session set events '10407 trace name context off';
Session altered.
'date'データ型の値には常に日付と時刻の要素が含まれています。日時値の時間部分のみを指定した場合、日付部分のデフォルトは現在の月の最初の日になります。 –
おそらく、関数のデフォルトの動作がどのように実装されているのでしょうか。あなたがその行動を変えることができるかどうかを尋ねるなら、私はそうは思わない。 – OldProgrammer
質問は私には明らかですが、他の多くの「なぜOracleはこのようにしましたか」という質問を入力すると、満足のいく回答になることはまずありません。彼らはデフォルト値を選択しなければなりませんでした。私は毎月変わらないものを選びましたが、私はオラクルではありません。少なくとも9i以来、私たちは 'INTERVAL'を持っています。 – Bacs