ROUNDファンクションは、指定する構文に従って数値操作または日時操作を実行します。ROUNDファンクションの構文は操作のタイプごとに異なるため、次の2項目に分けて説明します。
ROUND(日時)ファンクションは、書式モデルfmt
で指定した単位に丸められた日付を返します。戻される値は、日付に異なる日時データ型を指定した場合でも、常にDATETIME
データ型です。
パラメータ
日時の数値を指定する日時式。
次の表に示す書式モデルを指定するテキスト式。書式モデルは、日時の数字を丸める方法を示します。
この引数を省略した場合、datetime-exp
は最も近い日付に丸められます。
表8-13は、ROUND
およびTRUNC
日付ファンクションで使用できる書式モデルと、日付の丸めや切捨ての対象となる単位をまとめたものです。デフォルトのモデル「DD」では、時間が午前0時である日にちの形に丸められた、または切り捨てられた日付が返されます。
書式モデルDAY、DYおよびDで使用される週の開始日は、初期化パラメータNLS_TERRITORY
で暗黙的に指定されます。
例
例8-83 最も近い年への丸め
NLS_DATE_FORMATオプションの値がDD-MON-YY
の場合、次の文を発行します。
SHOW ROUND (TO_DATE('27-OCT-92'),'year')
次の値が返されます。
01-JAN-93
例8-84 別の書式への丸め
アナリティック・ワークスペースに、次のような定義と値を持つmydatetime
という名前の変数があるとします。
DEFINE MYDATETIME VARIABLE DATETIME DATE_FORMAT = 'MON-RRRR-DD-HH24' mydatetime = CURRENT_TIMESTAMP SHOW mydatetime = 'AUG-2006-07-13'
次のそれぞれのSHOW文が示すように、指定する値の日付書式によって、ROUNDファンクションからmydatetime
変数に返される値は異なります。
SHOW ROUND(mydatetime, 'RRRR') 01-JAN-07 SHOW ROUND(mydatetime, 'MON') 01-AUG-06 SHOW ROUND(mydatetime, 'DD') 08-AUG-06 SHOW ROUND(mydatetime) = 'AUG-2006-08-00'
数値を引数として指定すると、ROUNDファンクションは指定する2番目の数字に最も近い倍数に丸めた数字、または2番目の数字が示す小数桁数で丸めた数字を返します。
パラメータ
丸める数字を特定する式。
丸めの基礎を指定する値。
丸めのタイプがMULTIPLEの場合:
number_expはroundvalueの最も近い倍数に丸められます。
roundvalueはINTEGER
または小数です。
丸めのタイプがDECIMALの場合:
roundvalueで小数点の右側または左側の桁数を指定し、number_expを丸めます。roundvalueが正の場合、小数点の右側の数字を指定した桁数で丸めます。負の場合、小数点の左側の数字を指定した桁数で丸めます。
roundvalueを省略すると、number_expは小数桁数0
の整数に丸められます。
roundvalueはINTEGER
である必要があります。
(デフォルト)roundvalueの最も近い倍数に丸めることを指定します。
roundvalueで指定した小数桁で丸めることを指定します。
使用上の注意
ROUNDを使用した式の比較
DECIMAL値は、使用する有効桁数のレベルで表示されますが、それとはわずかに異なる形式で格納される場合があります。このわずかな違いは、2つの式を比較する際に予期しない結果になることがあります。この問題は、計算の多くがINTEGER値をDECIMAL値に変換してから実行されるため、計算を伴うINTEGER式を比較する場合にも生じます。通常のレポートでは、表示される小数点以下は2桁または3桁のみであるため、この相違に気づきません。
たとえば、2つの数字をEQまたはNE演算子で比較するとき、最後の有効数字の相違を無視することが必要な場合が多くあります。expense
が100.00000001
として格納されていた場合、最後の有効数字は単純な比較では無視されません。
次の文
SHOW expense EQ 100.00
によって、次の結果が生成されます。
NO
これに対し、EQまたはNEに意味のない最後の有効数字を無視させるようにROUNDを使用できます。
SHOW ROUND(expense, .01) EQ 100.00
この文によって生成される出力は、次のとおりです。
YES
ABSを使用した式の比較
アプリケーションで計算の速度を重視する場合は、EQまたはNEとともにROUNDを使用するかわりに、ABSファンクションをLTとともに使用して数字を比較することもできます。
例
例8-85 異なる倍数への丸め
次の文は、式2/3
を異なる倍数に丸めた結果を示します。DECIMALS設定の値は2
です。
次の文
SHOW ROUND(2/3, .01)
によって、次の結果が生成されます。
0.67
次の文
SHOW ROUND(2/3, .1)
によって、次の結果が生成されます。
0.70
次の文
SHOW ROUND(2/3, .5)
によって、次の結果が生成されます。
0.50
例8-86 最も近い千の単位への丸め
次の例は、最も近い千の単位に丸めたsales
を示します。
LIMIT month TO FIRST 4 LIMIT district TO FIRST 1 REPORT ROUND(sales 1000)
これらの文によって生成される出力は次のとおりです。
DISTRICT: BOSTON -------------ROUND(SALES 1000)------------- -------------------MONTH------------------- PRODUCT Jan95 Feb95 Mar95 Apr95 -------------- ---------- ---------- ---------- ---------- Tents 32,000.00 33,000.00 43,000.00 58,000.00 Canoes 66,000.00 76,000.00 92,000.00 126,000.00 Racquets 52,000.00 57,000.00 59,000.00 69,000.00 Sportswear 53,000.00 59,000.00 63,000.00 68,000.00 Footwear 91,000.00 87,000.00 100,000.00 108,000.00
例8-87 最も近い12の倍数への丸め
12の最も近い倍数に丸めたunits
を表示するには、次の文を使用します。
LIMIT month TO FIRST 4 LIMIT district TO FIRST 1 REPORT DECIMAL 0 ROUND(units 12)
これらの文によって生成される出力は次のとおりです。
DISTRICT: BOSTON --------------ROUND(UNITS 12)-------------- -------------------MONTH------------------- PRODUCT Jan95 Feb95 Mar95 Apr95 -------------- ---------- ---------- ---------- ---------- Tents 204 204 264 360 Canoes 348 396 480 660 Racquets 996 1,080 1,116 1,308 Sportswear 1,092 1,212 1,296 1,404 Footwear 2,532 2,400 2,772 2,976