• ベストアンサー

【PL/SQL】DATE型の時刻の表示と非表示

PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

q=2142210 No.3でも指摘されてますが、 execute immediate文を使ってるのが、悪さしてるのでは。 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); INSERT INTO テーブル名 VALUES ( dtWorkEndDate ); ――みたいに、単純な書き方で済むはずですが。

sum853
質問者

お礼

回答ありがとうございます。 execute文等に不備は無く、データ確認の際のこちらの知識不足でした。 ありがとうございました。

sum853
質問者

補足

やはりexecute immediateの中でシングルクォートを 用いていたのが良くなかったようです。 INSERT INTO テーブル名 VALUES to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS') とし、to_dateを文字列で渡してやることにより 問題解決致しました。 ありがとうございました。

その他の回答 (1)

  • proust
  • ベストアンサー率57% (62/108)
回答No.1

DBにどんな形式で日付が格納されているかを どのように確認していますか? 例えば CREATE TABLE worktable (end_date date); というテーブルなら SQL*Plusで SQL> SELECT * from worktable; としただけではNLS_DATE_FORMATが効いてしまうので SQL> SELECT to_char(end_date, 'yyyy/mm/dd hh24:mi:ss') from worktable; とするか SQL> alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss'); SQL> SELECT end_date from worktable; とする必要がありますね。

sum853
質問者

お礼

回答ありがとうございます。 今まではデータをSI Object Browserで確認していたのですが、 OracleのEnterprise Managerで確認したところ、 時刻もINSERTされていました。 データ確認の際にNLS_DATE_FORMATが影響することに 気付きませんでした。 ありがとうございました。

関連するQ&A