ROUND スカラー関数

ROUND 関数は、数値または日時値を丸めた値を返します。

ROUND numeric

Read syntax diagramSkip visual syntax diagramROUND(numeric-expression1 ,0,numeric-expression2 )

ROUND datetime

Read syntax diagramSkip visual syntax diagramROUND(datetime-expression ,'DD',format-stringlocale-name )

スキーマは SYSIBM です。 ROUND 数字関数の SYSFUN バージョンは引き続き使用可能です。

戻り値は、最初の引数によって異なります。
  • 最初の引数の結果が数値の場合、ROUND 関数は小数点の右側または左側の指定された桁数まで丸めた数値を返します。
  • 最初の引数が DATE、TIME、または TIMESTAMP の場合、ROUND 関数は format-string で指定された単位に丸めた日時値を返します。
ROUND numeric

numeric-expression1 が正の場合、5 以上の端数は、次に大きい正の数に丸められます。 例えば、ROUND( 3.5, 0) = 4 です。 numeric-expression1 が負の場合、5 以上の端数は、次に小さい負の数に丸められます。 例えば、ROUND(-3.5,0) = -4 のようになります。

numeric-expression1
組み込み CHAR、VARCHAR、GRAPHIC、VARGRAPHIC、または数値データ・タイプである値を戻す必要のある式。 値が数値データ・タイプでない場合、その値は関数を評価する前に 暗黙的に DECFLOAT(34) にキャストされます。

式が 10 進浮動小数点データ・タイプの場合、DECFLOAT の丸めモードは使用されません。 ROUND の丸めの動作は、ROUND_HALF_UP の値に対応します。 別の丸めの動作が必要な場合は、QUANTIZE 関数を使用してください。

numeric-expression2
組み込み数値データ・タイプの値を戻す式。 値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。

numeric-expression2 が負でない場合、numeric-expression1 は小数点の右側の、numeric-expression2 の桁数の絶対値に丸められます。

numeric-expression2 が負の場合、numeric-expression1 は小数点の左側の、numeric-expression2+1 の桁数の絶対値に丸められます。

負の numeric-expression2 絶対値が小数点の左側の桁数より大きい場合、結果は 0 になります。 例えば、ROUND( 748.58, -4) = 0 のようになります。 numeric-expression1 が正の場合、5 の数字は次に大きい正数に丸められます。 numeric-expression1 が負の場合、5 の端数は次に小さい負の数に丸められます。

結果のデータ・タイプおよび長さ属性は、最初の引数のデータ・タイプおよび 長さ属性と同じになります。ただし、numeric-expression1 が DECIMAL で、精度が 31 より小さいときに精度が 1 増加する場合を除きます。 例えば、データ・タイプが DECIMAL(5,2) の引数の結果は DECIMAL(6,2) に なります。 データ・タイプ DECIMAL(31,2) の引数は DECIMAL(31,2) になります。 位取りは最初の引数の位取りと同じです。

引数が NULL か、または引数が 10 進浮動小数点数ではなく、データベースの構成で dft_sqlmathwarn が YES に設定されている場合、結果は NULL になります。 引数が NULL の場合、結果は NULL 値になります。

この関数は、10 進浮動小数点引数についても、CURRENT DECFLOAT ROUNDING MODE 特殊レジスターの設定から影響を受けません。 ROUND の丸めの動作は、ROUND_HALF_UP の値に対応します。 10 進浮動小数点値の動作が CURRENT DECFLOAT ROUNDING MODE 特殊レジスターにより指定された丸めモードに従うようにする場合には、代わりに QUANTIZE 関数を使用してください。

ROUND datetime
datetime-expression に日時データ・タイプがある場合、ROUND 関数は、format-string で指定された単位に丸められた datetime-expression を戻します。 format-string が指定されていない場合、datetime-expression は、format-string に 'DD' が指定されているかのように、直近の日に丸められます。
日時式 (datetime-expression)
日付、時刻、またはタイム・スタンプの値を戻す必要がある式。 これらのデータ・タイプのストリング表記はサポートされていないため、この関数で使用するには、DATE 値、TIME 値、または TIMESTAMP 値に明示的にキャストする必要があります。あるいは、日付またはタイム・スタンプのストリング表記に ROUND_TIMESTAMP 関数を使用することもできます。
フォーマット・ストリング
実際の長さが 255 バイト以下の組み込み文字 ストリング・データ・タイプを返す式。 format-string のフォーマット・エレメントは、datetime-expression を丸める方法を指定します。 例えば、format-string が 'DD' である場合、datetime-expression で表されるタイム・スタンプは、直近の日に丸められます。 前後のブランクはストリングから除去されます。また、結果のサブストリングは、datetime-expression のタイプに有効なフォーマット・エレメントでなければなりません (SQLSTATE 22007)。 デフォルトは「DD」です。これは datetime-expression のデータ・タイプが TIME の場合には使用できません。

format-string に使用できる値は、 表 1にリストされているフォーマット・エレメントの表にリストされています。

ロケール名
フォーマット・エレメントの値として DAY、DY、または D を使用する場合に週の最初の日を決定するために使用される、ロケールを指定する文字定数です。 locale-name の値は大/小文字の区別がなく、有効なロケールでなければなりません (SQLSTATE 42815)。 有効なロケールとその命名については、SQL および XQuery のロケール名を参照してください。 locale-name が指定されないと、 特殊レジスター CURRENT LOCALE LC_TIME の値が使用されます。
関数の結果は、datetime-expression と同じ DATE タイプです。 結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。

以下のフォーマット・エレメントは、 ROUND、 ROUND_TIMESTAMP、 TRUNCATE、および TRUNC_TIMESTAMP 関数で日時値の丸めまたは切り捨ての単位を特定するために使用されます。

表 1. ROUND、ROUND_TIMESTAMP、TRUNCATE、および TRUNC_TIMESTAMP のフォーマット・エレメント
フォーマット・エレメント 丸めまたは切り捨ての単位 ROUND の例 TRUNCATE の例
CC
SCC
世紀

その世紀の 50 年目の後の次の世紀の始まりに切り上げられます (例えば、1951-01-01-00.00.00)。

TIME 引数に対しては無効です。

入力値:
1897-12-04-12.22.22.000000

結果:
1901-01-01-00.00.00.000000

入力値:
1897-12-04-12.22.22.000000

結果:
1801-01-01-00.00.00.000000

SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y
Year

7 月 1 日で、翌年の 1 月 1 日に切り上げられます。

TIME 引数に対しては無効です。

入力値:
1897-12-04-12.22.22.000000

結果:
1898-01-01-00.00.00.000000

入力値:
1897-12-04-12.22.22.000000

結果:
1897-01-01-00.00.00.000000

IYYY
IYY
IY
I
ISO 年

7 月 1 日で、翌 ISO 年の初日に切り上げられます。 ISO 年の初日は、最初の ISO 週の月曜日と定義されます。

TIME 引数に対しては無効です。

入力値:
1897-12-04-12.22.22.000000

結果:
1898-01-03-00.00.00.000000

入力値:
1897-12-04-12.22.22.000000

結果:
1897-01-04-00.00.00.000000

Q 四半期

四半期の第 2 の月の 16 日目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
1999-06-04-12.12.30.000000

結果:
1999-07-01-00.00.00.000000

入力値:
1999-06-04-12.12.30.000000

結果:
1999-04-01-00.00.00.000000

MONTH
MON
MM
RM
Month

月の 16 日目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
1999-06-18-12.12.30.000000

結果:
1999-07-01-00.00.00.000000

入力値:
1999-06-18-12.12.30.000000

結果:
1999-06-01-00.00.00.000000

WW 年の初日と同じ曜日。

年の初日に関して、4 番目の曜日の 12 時間目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
2000-05-05-12.12.30.000000

結果:
2000-05-06-00.00.00.000000

入力値:
2000-05-05-12.12.30.000000

結果:
2000-04-29-00.00.00.000000

IW ISO 年の初日と同じ曜日。 詳細については、『WEEK_ISO スカラー関数』を参照してください。

ISO 年の初日に関して、4 番目の曜日の 12 時間目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
2000-05-05-12.12.30.000000

結果:
2000-05-08-00.00.00.000000

入力値:
2000-05-05-12.12.30.000000

結果:
2000-05-01-00.00.00.000000

W 月の初日と同じ曜日。

月の初日に関して、4 番目の曜日の 12 時間目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
2000-06-21-12.12.30.000000

結果:
2000-06-22-00.00.00.000000

入力値:
2000-06-21-12.12.30.000000

結果:
2000-06-15-00.00.00.000000

DDD
DD
J

日の 12 時間目で切り上げられます。

TIME 引数に対しては無効です。

入力値:
2000-05-17-12.59.59.000000

結果:
2000-05-18-00.00.00.000000

入力値:
2000-05-17-12.59.59.000000

結果:
2000-05-17-00.00.00.000000

DAY
DY
D
開始曜日。

4 番目の曜日の 12 時間目に関して切り上げられます。 最初の曜日はロケールに基づきます (locale-name を参照してください)。

TIME 引数に対しては無効です。

入力値:
2000-05-17-12.59.59.000000

結果:
2000-05-21-00.00.00.000000

入力値:
2000-05-17-12.59.59.000000

結果:
2000-05-14-00.00.00.000000

HH
HH12
HH24

30 分で切り上げられます。

入力値:
2000-05-17-23.59.59.000000

結果:
2000-05-18-00.00.00.000000

入力値:
2000-05-17-23.59.59.000000

結果:
2000-05-17-23.00.00.000000

MI Minute

30 秒で切り上げられます。

入力値:
2000-05-17-23.58.45.000000

結果:
2000-05-17-23.59.00.000000

入力値:
2000-05-17-23.58.45.000000

結果:
2000-05-17-23.58.00.000000

SS

1/2 秒で切り上げられます。

入力値:
2000-05-17-23.58.45.500000

結果:
2000-05-17-23.58.46.000000

入力値:
2000-05-17-23.58.45.500000

結果:
2000-05-17-23.58.45.000000

注: 表 1 のフォーマット要素は大文字で指定する必要があります。

値の時刻の部分に該当するフォーマット・エレメントが日付引数に指定されている場合、日付引数は変更されないまま戻されます。 時刻引数に無効のフォーマット・エレメントが時刻引数に指定されている場合、エラーが戻されます (SQLSTATE 22007)。

  • 決定論: ROUND は決定論的な関数です。 ただし、以下の関数の呼び出しは、特殊レジスターの CURRENT LOCALE LC_TIME の値によって決まります。
    • locale-name が明示的に指定されず、以下のいずれかが真の場合、日時値の丸め。
      • format-string が定数でない
      • format-string が定数で、ロケールに依存するフォーマット・エレメントが含まれる
      特殊レジスターを使用できないところでは、特殊レジスターの値に依存する関数の呼び出しを使用することはできません (SQLSTATE 42621、428EC、または 429BX)。

  • 例 1: 値 873.726 を小数点以下 2, 1, 0, -1, -2, -3, および -4 桁に、それぞれ丸めます。
       VALUES (
         ROUND(873.726, 2),
         ROUND(873.726, 1),
         ROUND(873.726, 0),
         ROUND(873.726,-1),
         ROUND(873.726,-2),
         ROUND(873.726,-3),
         ROUND(873.726,-4) )
    この例は次の値を返します。
    1         2         3         4         5         6         7
    --------- --------- --------- --------- --------- --------- ---------
      873.730   873.700   874.000   870.000   900.000  1000.000     0.000
  • 例 2: 正と負の両方の数を使って計算します。
       VALUES (
         ROUND(3.5, 0),
         ROUND(3.1, 0),
         ROUND(-3.1, 0),
         ROUND(-3.5,0) )
    この例は次の値を返します。
    1    2    3    4
    ---- ---- ---- ----
     4.0  3.0 -3.0 -4.0
  • 例 3: 10 進浮動小数点数 3.12350 の小数第 3 位までの丸めを計算します。
       VALUES (
         ROUND(DECFLOAT('3.12350'), 3))
    この例は次の値を返します。
    1
    -----
    3.12400
    
  • 例 4: 直近月の値に丸められた入力日付でホスト変数 RND_DT を設定します。
       SET :RND_DATE = ROUND(DATE('2000-08-16'), 'MONTH');    
    値セットは 2000-09-01 です。
  • 例 5: 直近年の値に丸められた入力タイム・スタンプでホスト変数 RND_TMSTMP を設定します。
       SET :RND_TMSTMP = ROUND(TIMESTAMP('2000-08-14-17.30.00'),
                               'YEAR');
    値セットは 2001-01-01-00.00.00.000000 です。