oracleのDATE型は日付だけでなく時刻の情報も格納しているとのことですが、時刻を登録できません。
黒本(12cSQL基礎 初版2刷)のp.276には「DATE型:日付、時刻を含む固定長7バイトの日付データ型。4桁年、月、日、時、分、秒を格納します。」とありますが、年月日しか格納できませんでした。
「2000-01-01 00:00:00」や「2020-08-20 21:24:00」、「01-JAN-00 00:00:00」のような形で格納されると思っていたのですが違うのでしょうか?
【したこと】
(1) Oracle Live SQLで以下のSQLを実行してDATE型の列を持つsampleテーブルを作成
sql
1CREATE TABLE sample( 2 regdate date 3);
(2-1)以下の各SQLを実行してレコードを登録
sql
1 INSERT INTO sample VALUES ('15-Apr-00'); 2 INSERT INTO sample VALUES ('15-Apr-01'); 3 INSERT INTO sample VALUES (sysdate);
(2-2)以下の各SQLを実行してレコードを登録しようとしたがエラーで登録できなかった。
sql
1INSERT INTO sample VALUES ('15-Apr-00 00:00:00'); 2INSERT INTO sample VALUES ('15-Apr-01 00:00:00');
エラー文は以下:
date format picture ends before converting entire input string ORA-06512: at "SYS.DBMS_SQL", line 1721
(3)以下のSQLを実行。
想定結果:時刻はデフォルトで「00:00:00」が登録されるはずなので「15-Apr-00」「15-Apr-01」が抽出される。
実際の結果:「15-Apr-00」の1行だけ表示された。
また、sampleテーブルのcolumnsを確認するとLengthは7で「 00:00:00」は格納されていなかった。
sql
1SELECT * FROM sample WHERE regdate LIKE '%00%';
この程度のことは実際にSQLを実行して動作確認しましょう。そうしないと身に付きません。
ちなみに、
SQL> SELECT TO_DATE('19-DEC-00', 'DD-MON-RR') FROM DUAL ;
SELECT TO_DATE('19-DEC-00', 'DD-MON-RR') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01843: 指定した月が無効です。
ORACLEの実行環境がなかったので編集前のような質問をしてしまいましたが仰るとおりですね。
Oracle Live SQLという試し打ちができる場所を見つけましたので自分で試したことの追記他、全体を編集いたしました。
コードやエラーメッセージは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。CREATE TABLE文も欲しいです。
質問に参考にした書籍名やURLは https://teratail.com/help/question-tips#questionTips3-7 の [リンク] で [リンク先の説明](http...) で追記してください。
ご指摘をもとに編集しました。

回答1件
あなたの回答
tips
プレビュー