• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Oracleでミリ秒の加算)

Oracleでミリ秒の加算

このQ&Aのポイント
  • Oracleで秒以下の単位を含む加算の仕方を教えてください。
  • SET SERVEROUTPUT ON FORMAT WRAPPED DECLARE targetTime TIMESTAMP(6) := TO_TIMESTAMP('2012/08/14 06:00:00', 'YYYY/MM/DD HH24:MI:SS'); vAddTime NUMBER(20, 10) := (1 / 86400) * 0.5; i integer := 0; BEGIN dbms_output.put_line('加算する値'); dbms_output.put_line(vAddTime); while (i < 10) loop dbms_output.put_line(targetTime); targetTime := targetTime + vAddTime; i := i + 1; end loop; END;
  • 下記のサンプルでtargetTimeが0.5秒ずつ増えていくようにしたいのですがうまくいきません。ちょっと書き方を変えればいいだけの事のような気がするのですが、いろいろ試したのですがうまくいきませんでした…。 よろしくお願いします。

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

TO_DSINTERVALかNUMTODSINTERVALを使えばいいと思うのだけど。 TO_DSINTERVALなら vAddTimeC varchar2(20); vAddTimeC := '0 0:0:0.5'; targetTime := targetTime + TO_DSINTERVAL(vAddTimeC); NUMTODSINTERVALが使えるなら(Oracle10gで使えたかどうか未確認。) vAddTime := 0.5; targetTime := targetTime + NUMTODSINTERVAL(vAddTime, 'SECOND') ; Varchar2でもNumberからTO_CHAR()で変換すればしまいの話なので、 どちらを使っても、間隔を可変にするのも容易なはず。

pringlez
質問者

お礼

今回は「vAddTime」をNUMBER型で定義したかったのでNUMTODSINTERVALを使ってみました。 そして…10gでNUMTODSINTERVAL、使えました!期待通りに動きました。 私が調べても見つけられなかったので少しあきらめていたのですが、大変助かりました。ありがとうございました。

pringlez
質問者

補足

参考までに完成したサンプルを添付しておきます。 DECLARE   targetTime TIMESTAMP(6) := TO_TIMESTAMP('2012/08/14 06:00:00', 'YYYY/MM/DD HH24:MI:SS');   vAddTime NUMBER := 0.5;   i integer := 0; BEGIN   dbms_output.put_line('加算する値');   dbms_output.put_line(vAddTime);   while (i < 10) loop     dbms_output.put_line(targetTime);     targetTime := targetTime + NUMTODSINTERVAL(vAddTime, 'SECOND');     i := i + 1;   end loop; END;

その他の回答 (1)

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

Oracleのバージョンが不明ですが、INTERVALは使用できないでしょうか? SELECT SYSTIMESTAMP + (INTERVAL '0.5' SECOND) FROM DUAL;

pringlez
質問者

お礼

教えていただいた方法で、0.5秒を加算する事ができました!ちなみにバージョンは10gです。 しかしこの方法だと…加算したい値をハードコードするしか無いんですかね?変数を記述する事はできないのでしょうか? もしもできないのだとしても一歩進めました。参考になりました。ありがとうございました。