- ベストアンサー
※ 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秒ずつ増えていくようにしたいのですがうまくいきません。ちょっと書き方を変えればいいだけの事のような気がするのですが、いろいろ試したのですがうまくいきませんでした…。 よろしくお願いします。
- みんなの回答 (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()で変換すればしまいの話なので、 どちらを使っても、間隔を可変にするのも容易なはず。
その他の回答 (1)
- hogya
- ベストアンサー率67% (49/73)
回答No.1
Oracleのバージョンが不明ですが、INTERVALは使用できないでしょうか? SELECT SYSTIMESTAMP + (INTERVAL '0.5' SECOND) FROM DUAL;
質問者
お礼
教えていただいた方法で、0.5秒を加算する事ができました!ちなみにバージョンは10gです。 しかしこの方法だと…加算したい値をハードコードするしか無いんですかね?変数を記述する事はできないのでしょうか? もしもできないのだとしても一歩進めました。参考になりました。ありがとうございました。
お礼
今回は「vAddTime」をNUMBER型で定義したかったのでNUMTODSINTERVALを使ってみました。 そして…10gでNUMTODSINTERVAL、使えました!期待通りに動きました。 私が調べても見つけられなかったので少しあきらめていたのですが、大変助かりました。ありがとうございました。
補足
参考までに完成したサンプルを添付しておきます。 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;