アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
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型のデータの時刻を取る方法をご存知でしたら、教えていただけますでしょうか。
よろしくお願いします。

A 回答 (3件)

試してないので憶測ですが、


おそらくdtWorkEndDate は時間ももってます。
日付のデフォルト出力フォーマットが[yy-mm-dd]になってるので、時間が表示されないだけです。

to_char(to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS');

とすれば、時間も表示されませんか?
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

>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を変更するしかないのでしょうか。

お礼日時:2006/05/10 12:06

INSERT INTO テーブル名 VALUES(dtWorkEndDate)


だけで。
前後にシングルコーテーションを付加すると、
'''||TO_CHAR(dtWorkEndDate)||'''
と同じことになってしまうはずなので。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

シングルクォーテーションを付けないと、
number型と見なされエラーとなってしまいました。。

お礼日時:2006/05/10 19:18

実際にDate型に[05-12-25]の値が入っているわけではなく、単に表示する時に時刻を削って表示しているだけだと思われます。



そのままdtWorkEndDateをINSERTして、
SELECT
TO_CHAR([dtWorkEndDateを入れたテーブル列名,'YYYY/MM/DD HH24:MI:SS')
FROM
[dtWorkEndDateを入れたテーブル行名]
;

としてみてください。
DBに値がちゃんと入っているのが確認できると思われます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

そのまま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')となっていました。

もし何かお気づきの点がありましたらご教授下さい。
よろしくお願いします。

お礼日時:2006/05/10 13:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A