• ベストアンサー

PL/SQLでのTO_DATEの時間取得について

お世話になります。 PL/SQLでDATE型のデータの日時を取得する方法を教えてください。 PL/SQLでDBの値を、TO_CHARで取ってきて、その値をTO_DATEすると、時刻が落ちてしまいます。 charWorkEndDate VARCHAR2(20); dtWorkEndDate DATE; charWorkEndDate := to_char(V00061_Rec.S_DATE5, 'YYYY/MM/DD HH24:MI:SS'); dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); 出力結果 --charWorkEndDate- [2005/12/25 06:00:19] --dtWorkEndDate- [05-12-25] to_dateの1つ目の引数にシングルクォーテーションが必要かと思い、 dtWorkEndDate := to_date('''||charWorkEndDate||''', 'YYYY/MM/DD HH24:MI:SS'); としてみたのですが、その場合、「ORA-01841: (周)年は-4713と+9999の間の0以外の数を指定する必要があります」とのエラーが出てしまいます。 どなたかDATE型のデータの時刻を取る方法をご存知でしたら、教えていただけますでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#18558
noname#18558
回答No.1

試してないので憶測ですが、 おそらくdtWorkEndDate は時間ももってます。 日付のデフォルト出力フォーマットが[yy-mm-dd]になってるので、時間が表示されないだけです。 to_char(to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS'); とすれば、時間も表示されませんか?

sum853
質問者

お礼

返信ありがとうございます。 >to_char(to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS'); で時間も取得できました。 重ねてもしご存知でしたら教えていただきたいのですが、 この取得した日時をDATE型でINSERTしたい場合は、 どのような記述が適切なのでしょうか。 TO_DATEでは日時が落ちてしまい、 'to_char(to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS')' ではリテラルと書式が一致しないとエラーになってしまいます。 初期化パラメータNLS_DATE_FORMATを変更するしかないのでしょうか。

その他の回答 (2)

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.3

INSERT INTO テーブル名 VALUES(dtWorkEndDate) だけで。 前後にシングルコーテーションを付加すると、 '''||TO_CHAR(dtWorkEndDate)||''' と同じことになってしまうはずなので。

sum853
質問者

お礼

回答ありがとうございます。 シングルクォーテーションを付けないと、 number型と見なされエラーとなってしまいました。。

  • shobon
  • ベストアンサー率66% (14/21)
回答No.2

実際にDate型に[05-12-25]の値が入っているわけではなく、単に表示する時に時刻を削って表示しているだけだと思われます。 そのままdtWorkEndDateをINSERTして、 SELECT TO_CHAR([dtWorkEndDateを入れたテーブル列名,'YYYY/MM/DD HH24:MI:SS') FROM [dtWorkEndDateを入れたテーブル行名] ; としてみてください。 DBに値がちゃんと入っているのが確認できると思われます。

sum853
質問者

お礼

回答ありがとうございます。 そのままdtWorkEndDateをINSERTしたのですが、 DBには日付しか入りませんでした。 >単に表示する時に時刻を削って表示しているだけだと思われます。 INSERTの前の時点では、 TO_CHAR(dtWorkEndDate, 'YYYY/MM/DD HH24:MI:SS') で表示させたところ、時間が入っていました。 INSERT文は execute immediate 'INSERT INTO テーブル名 VALUES(''' || dtWorkEndDate || ''')'; となっています。 INSERT文のログは、VALUES('05-01-04')となっていました。 もし何かお気づきの点がありましたらご教授下さい。 よろしくお願いします。

関連するQ&A