ROUND

ROUND

input_expr의 반올림 값을 반환하는 함수예요. 소수점 자릿수와 반올림 방식까지 지정할 수 있습니다.

출처: Snowflake SQL Reference

본문

ROUND( <input_expr> [ , <scale_expr> [ , '<rounding_mode>' ] ] )
ROUND( EXPR => <input_expr> ,
       SCALE => <scale_expr>
       [ , ROUNDING_MODE => '<rounding_mode>'  ] )

인자

  • input_expr(또는 EXPR =>) — 연산할 값 또는 표현식. DECFLOAT, FLOAT, NUMBER 같은 숫자 데이터 타입이어야 해요. EXPR => 이름 인자를 지정하면 SCALE => 이름 인자도 지정해야 해요.
  • scale_expr(또는 SCALE =>) — 출력이 소수점 뒤에 포함할 자릿수. 기본값은 0이라 소수점 뒤 모든 자릿수를 제거해요. 음수이면 소수점 앞 몇 자리까지 조정할지를 뜻해요(예: scale이 -2면 결과는 100의 배수).
  • rounding_mode(또는 ROUNDING_MODE =>) — 사용할 반올림 방식.
    • HALF_AWAY_FROM_ZERO — 0에서 멀어지는 방향으로 반올림. 기본값.
    • HALF_TO_EVEN — 짝수로 반올림.
    • 이 인자를 지정하면 input_expr의 데이터 타입이 고정 소수점 숫자 타입 중 하나여야 해요. FLOAT 같은 부동 소수점 타입은 지원되지 않아요.

반환 타입은 입력 타입에 기반해요. FLOAT는 FLOAT, DECFLOAT는 DECFLOAT, NUMBER는 NUMBER를 반환해요. 입력·스케일 중 하나라도 NULL이면 NULL을 반환해요.

사용 메모

  • 위치 인자와 이름 인자를 섞을 때 모든 위치 인자가 먼저 와야 해요. 이름 인자에는 큰따옴표를 쓸 수 없어요.
  • scale_expr가 입력 표현식의 스케일보다 크면 함수는 효과가 없어요.
  • 기본적으로 소수점 중간값은 0에서 멀어지는 방향으로 반올림돼요. 예: -0.5는 -1.0으로. HALF_TO_EVEN을 지정하면 -0.5가 0으로 반올림돼요.
  • 부동소수점은 근사값이라 반올림이 예상대로 되지 않을 수 있어요.
  • 반올림으로 값이 데이터 타입 범위를 벗어나면 오류를 반환해요.

예시 — 기본 자릿수(0):

SELECT ROUND(135.135), ROUND(-975.975);
+----------------+-----------------+
| ROUND(135.135) | ROUND(-975.975) |
|----------------+-----------------|
|            135 |            -976 |
+----------------+-----------------+

스케일을 다양하게 주고 결과를 비교해 볼게요.

SELECT n, scale, ROUND(n, scale)
  FROM test_ceiling
  ORDER BY n, scale;
+----------+-------+-----------------+
|        N | SCALE | ROUND(N, SCALE) |
|----------+-------+-----------------|
| -975.975 |    -1 |        -980     |
| -975.975 |     0 |        -976     |
| -975.975 |     2 |        -975.98  |
|  135.135 |    -2 |         100     |
|  135.135 |     0 |         135     |
|  135.135 |     1 |         135.1   |
|  135.135 |     3 |         135.135 |
+----------+-------+-----------------+

기본 반올림과 HALF_TO_EVEN의 차이:

SELECT ROUND(2.5, 0), ROUND(2.5, 0, 'HALF_TO_EVEN');
+---------------+-------------------------------+
| ROUND(2.5, 0) | ROUND(2.5, 0, 'HALF_TO_EVEN') |
|---------------+-------------------------------|
|             3 |                             2 |
+---------------+-------------------------------+

더 알아보기 (Learn more)