ROUND
ROUND
input_expr의 반올림 값을 반환하는 함수예요. 소수점 자릿수와 반올림 방식까지 지정할 수 있습니다.
본문
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 |
+---------------+-------------------------------+