• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PLSQL CHARの項目を使用した計算)

PLSQL CHARの項目を使用した計算

このQ&Aのポイント
  • Oracle8iのストアドプロシジャを作成しています。SELECT SYSDATEで取得したシステム時間から任意時間前の時刻を算出し、CHAR(16)の文字列(YYYYMMDDHHMMSSMS)にしたいのですが、うまくいきません。
  • SQLPLUSの標準出力にログを出して確認したところ、分や秒(W_CHECK_SS )がマイナスになってしまいます。どのようにすればうまくいくのかアドバイスをいただけたらと思います。
  • 現在は、システム時刻から基準前の時刻を計算していますが、その計算結果が正しくないようです。正しい計算結果を得るためにはどうすれば良いでしょうか?

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

  • ベストアンサー
回答No.3

#2です。 こんな感じでどうでしょう? create or replace procedure testsp(in_kijun_time in number) is wkday_dt date; wk_day_c varchar2(20); day_hh char(2); day_mi char(2); day_ss char(2); begin wkday_dt := sysdate; dbms_output.put_line('現在時刻:'||to_char(wkday_dt,'yyyymmddhh24miss')||'00'); wkday_dt := wkday_dt+(in_kijun_time/(24*60*60)); dbms_output.put_line('算出時刻:'||to_char(wkday_dt,'yyyymmddhh24miss')||'00'); -- パーツ単位で取得したいのなら day_hh := to_char(wkday_dt,'hh'); day_mi := to_char(wkday_dt,'mi'); day_ss := to_char(wkday_dt,'ss'); dbms_output.put_line('時:'||day_hh); dbms_output.put_line('分:'||day_mi); dbms_output.put_line('秒:'||day_ss); end;

sukekei
質問者

お礼

教えていただいた方法でできました。とてもシンプルなスクリプトになりました。 ありがとうございました。

その他の回答 (2)

回答No.2

単純に指定された秒後の日付を取得したいのであれば日付型で計算すればよいのではないのでしょうか? select sysdate+(60/(24*60*60)) nextdate from dual で60秒後の日付になるので後はTO_CHARで編集してあげれば良いと思います。 やりたいことと違っていたらごめんなさい。

sukekei
質問者

お礼

SQLで計算してあげれば簡単にできるのですね。 SQLをもっと勉強します。 ありがとうございます。

回答No.1

W_CHECK_MM := W_CHECK_SEC / 60; のところで、24.71... → 25 に四捨五入されてしまっているのではないでしょうか。

sukekei
質問者

お礼

確かに四捨五入されています。 だからマイナスになっていたのですね。 ご指摘ありがとうございます。