SQL 関数一覧 (T‐Z) > TO_DSINTERVAL、NUMTODSINTERVAL

文字列を日〜秒期間型に変換、数値を期間型に変換

日〜秒期間型 = INTERVAL DAY TO SECOND ⇔ 年月期間型に変換する関数

syntax

TO_DSINTERVAL ( string, nls_param ) Oracle 9i
NUMTODSINTERVAL ( number , ds_interval_unit ) Oracle 8i
return [ INTERVAL DAY TO SECOND ]

parameter

string期間型に変換できる一定の文字列式
nls_paramNLS_NUMERIC_CHARACTERS を指定できるが使いどころが不明
number年、月、日、時、分、または、秒の数値式(小数を含んでもよい)
ds_interval_unit期間単位指定 における 日、時、分、または、秒

return

  • 期間書式に従って記述された文字式 string を日〜秒期間型に変換した値
  • 期間単位 xx_interval_unit を1単位として数えた number 分の期間型の値

avail

  • SQL および PL/SQL の両方で使用可能。

期間の要素

期間式の要素ds interval unit 引数
DAY
HOUR
MINUTE
SECOND

TO_DSINTERVAL 関数の内容

日、時分秒の 期間リテラル の書式 'days hours:minutes:seconds[.nano_sec]' 形式で記述された文字列を DS_INTERVAL 期間型に変換する。 月の要素 months は 9桁 、それ以下はそれぞれ [0-23]、[0-59]、[0-59]、[1秒未満のナノ秒] を整数であらわす。

nls_param は数値のセパレータ文字を設定する NLS_NUMERIC_CHARACTERS のみ使用可能と書かれているが使いどころがわかりません。小数秒の区切り文字にも関係ないようである。

NUMTODSINTERVAL 関数の内容

日、時分秒のいずれかを単位とした number を 'INTERVAL DAY TO SECOND' 期間型 に変換する。 日〜秒のどの単位かは 期間単位 ds_interval_unit の指定した内容による。number には小数を含めることもできる。

日付の差を取り扱う時の注意

NUMTODSINTERVAL の number に 「日付型 - 日付型」による差分や直接数値を指定すると割り切れずに表現できない数値の誤差によって 1秒が 0.999999999 秒になってしまうことがある。日付型同士の引き算で正しい INTERVAL 型を求めたい場合には DATE 型を 一旦 TIMESTAMP 型に CAST してから引き算を行うことが望ましい。

秒数が正しく変換されない例
DATE 型同士の引き算による 18 秒後 = 18/24/60/60 = 0.000208333333333..

SQL> select NUMTODSINTERVAL(18/24/60/60, 'DAY') from dual;
 
NUMTODSINTERVAL(18/24/60/60,'DAY')
-----------------------------------------------------------
+000000000 00:00:17.999999999

TO_DSINTERVAL 使用例

TO_YMINTERVAL('-999 01:02:03.123456789') ⇒ 999日 1時間 2分 3.12...89 秒前

NUMTODSINTERVAL 使用例

引数の数値を INTERVAL DAY TO SECOND 型に変換する。小数秒はタイムスタンプと同じ精度を持っている。

NUMTODSINTERVAL(100, 'DAY')  ⇒ 100 日
NUMTODSINTERVAL(300, 'SECOND') ⇒ 5 分
NUMTODSINTERVAL(0.5, 'MINUTE')  ⇒ 0.5 分 ⇒ 30 秒
NUMTODSINTERVAL(0.5, 'SECOND')  ⇒ 0.5 秒 ⇒  0.5 秒


SQL 関数 - TO_DSINTERVAL,NUMTODSINTERVAL 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)