3

timestamp運が悪くても変数にナノ秒を追加しようとしています。

これはコード例です:

DECLARE
  lts_nextTimestamp TIMESTAMP = TO_TIMESTAMP('11-11-2013 22:10:10:111111111');
  ;
BEGIN
  lts_nextTimestamp := lts_nextTimestamp + 1 / (10000000*60*60*24)
END;

どうすればこれを達成できますか?

4

1 に答える 1

8

interval day to secondリテラルを使用して、タイムスタンプ値に小数秒を追加できます。

この例では、1 ナノ秒を追加します。

select timestamp '2013-11-11 22:10:10.111111111' + 
       interval '0 00:00:00.000000001' day to second(9) as res
  from dual

結果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 

:to_timestamp()関数を使用して文字リテラルをタイムスタンプ データ型の値に変換する場合は、フォーマット マスクを指定することをお勧めします (NLS 設定のリレーではありません)。

select TO_TIMESTAMP('11-11-2013 22:10:10:111111111', 'dd-mm-yyyy hh24:mi:ss:ff9') + 
       interval '0 00:00:00.000000001' day to second(9) as res
  from dual

結果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 

注意: PL/SQLを使用してタイムスタンプ・データ型の値を処理する場合は、次のことに注意してください。PL/SQL では、timestamp データ型の値の小数秒のデフォルト精度は、SQL の 9 ではなく 6 であるため、小数秒の切り捨てが予想される場合があります。小数秒の切り捨てを避けるために、 andの代わりにtimestamp_unconstrainedandのデータ型を使用します。dsinterval_unconstrainedtimestampinterval day to second

declare
  l_tmstmp timestamp_unconstrained := to_timestamp('11-11-2013 22:10:10:111111111',
                                                   'dd-mm-yyyy hh24:mi:ss:ff9');
  l_ns     dsinterval_unconstrained :=  interval '0.000000001' second;
begin
  l_tmstmp := l_tmstmp + l_ns;
  dbms_output.put_line(to_char(l_tmstmp, 'dd-mm-yyyy hh24:mi:ss:ff9'));
end;

結果:

anonymous block completed
11-11-2013 22:10:10:111111112
于 2013-11-08T19:01:36.267 に答える