데이터베이스/MS-SQL 😃

MSSQL에서 FLOOR, CEILING, ROUND 함수 알아보자.

재우니 2023. 6. 5. 00:30

 

 

MSSQL에서 FLOOR, CEILING, ROUND 함수는 숫자 값을 다른 방식으로 반올림하거나 내림하는 데 사용됩니다. 각 함수의 동작은 다음과 같습니다.

 

FLOOR 함수:

FLOOR 함수는 인수로 전달된 숫자를 소수점 이하로 내림하여 가장 큰 정수 값을 반환합니다.즉, 소수점 아래 값을 버리고 정수 부분만 남깁니다.
SELECT FLOOR(3.14) -- 출력: 3
SELECT FLOOR(-2.5) -- 출력: -3

 

CEILING 함수:

CEILING 함수는 인수로 전달된 숫자를 소수점 이하에서 올림하여 가장 작은 정수 값을 반환합니다.즉, 소수점 아래 값을 올리고 정수 부분만 유지합니다.
SELECT CEILING(3.14) -- 출력: 4
SELECT CEILING(-2.5) -- 출력: -2

 

ROUND 함수:

ROUND 함수는 인수로 전달된 숫자를 가장 가까운 정수로 반올림합니다.소수점 이하의 숫자가 0.5보다 크거나 같으면 올림하고, 0.5보다 작으면 내림합니다.
SELECT ROUND(3.14) -- 출력: 3
SELECT ROUND(-2.5) -- 출력: -2

 

위의 예시에서 소수점 포함 및 음수 값을 사용하여 각 함수의 동작을 설명했습니다. FLOOR 함수는 가장 가까운 작은 정수 값을 반환하며, CEILING 함수는 가장 가까운 큰 정수 값을 반환합니다. 반면, ROUND 함수는 소수점 이하 값을 반올림하여 가장 가까운 정수 값을 반환합니다.

 

 

ROUND 함수는 소수점 값을 지정된 자리수로 반올림하는 데 사용됩니다. 이를 통해 원하는 소수 자릿수까지 반올림된 값을 얻을 수 있습니다. 예제를 통해 설명드리겠습니다.

 

SELECT ROUND(3.14159, 2) -- 출력: 3.14
SELECT ROUND(2.5678, 3) -- 출력: 2.568
SELECT ROUND(7.99, 0) -- 출력: 8

 

첫 번째 예제에서는 ROUND(3.14159, 2)를 사용하여 소수점 다음 두 자리까지 반올림된 값인 3.14를 얻습니다.
두 번째 예제에서는 ROUND(2.5678, 3)을 사용하여 소수점 다음 세 자리까지 반올림된 값인 2.568을 얻습니다.
마지막 예제에서는 ROUND(7.99, 0)을 사용하여 소수점을 버리고 가장 가까운 정수인 8을 얻습니다.

위의 예제에서는 ROUND(숫자, 자리수) 형식을 사용하여 반올림할 숫자와 자리수를 지정했습니다.
자리수는 양의 정수로 지정되며, 0보다 작은 값을 사용할 수도 있습니다.
자리수가 음수인 경우, 해당 자리의 왼쪽에서 반올림이 이루어집니다.
예를 들어 ROUND(12345, -2)는 100의 자리에서 반올림하여 12400을 반환합니다.
ROUND 함수를 사용하여 소수점 값을 원하는 자릿수로 반올림할 수 있습니다.

 

MSSQL의 LOG 함수

주어진 숫자의 로그 값을 계산하는 데 사용됩니다.
보통 자연로그 값을 계산하는 데에 많이 사용되며, 밑(base)을 지정하여
다른 로그 값을 계산하는 데에도 활용될 수 있습니다.
자연로그 값을 계산하기 위해서는 아래와 같이 LOG 함수를 사용합니다:

 

예를 들어, LOG(10)은 주어진 숫자 10의 자연로그 값을 계산하여 반환합니다.

SELECT LOG(10) -- 출력: 2.302585092994046

 

LOG(2, 8)은 주어진 숫자 8의 밑이 2인 로그 값을 계산하여 반환합니다. 이 경우, 2의 몇 제곱이 8인지 계산한 값, 즉 2^3 = 8 이므로 결과는 3이 됩니다.

SELECT LOG(2, 8) -- 출력: 3

로그 함수를 사용하여 숫자의 로그 값을 계산할 수 있으며, 자연로그 값을 계산하는 경우 많이 활용됩니다.

 

 

실행해 보자.

 

종합적으로 다양하게 양수,음수, 소수점을 넣어서 결과치를 확인해 봤습니다.

-- floor 버림 (to integer)
SELECT FLOOR(+135.375); --135
SELECT FLOOR(+135.575); --135
SELECT FLOOR(+135.675); --135
SELECT FLOOR(+11.4); --11
SELECT FLOOR(+11.5); --11
SELECT FLOOR(+11.6); --11
SELECT FLOOR(-135.375); --(-136)
SELECT FLOOR(-135.575); --(-136)
SELECT FLOOR(-135.675); --(-136)
SELECT FLOOR(-11.4); --(-12)
SELECT FLOOR(-11.5); --(-12)
SELECT FLOOR(-11.6); --(-12)

-- CEIL 또는 CEILING: 올림 (to integer)
SELECT CEILing(+135.375); --136
SELECT CEILing(+135.575); --136
SELECT CEILing(+135.675); --136
SELECT CEILing(+11.4); --12
SELECT CEILing(+11.5); --12
SELECT CEILing(+11.6); --12
SELECT CEILing(-135.375); --(-135)
SELECT CEILing(-135.575); --(-135)
SELECT CEILing(-135.675); --(-135)
SELECT CEILing(-11.4); --(-11)
SELECT CEILing(-11.5); --(-11)
SELECT CEILing(-11.6); --(-11)

SELECT ROUND(+135.371,2); --135.370
SELECT ROUND(+135.575,2); --135.580
SELECT ROUND(+135.676,2); --135.680
SELECT ROUND(-135.371,2); --(-135.370)
SELECT ROUND(-135.575,2); --(-135.580)
SELECT ROUND(-135.676,2); --(-135.680)

 

 

 

버림 (FLOOR)

 

소수점 둘째 자리에서 반올림을 하지 않고 항상 소수점 첫 번째 자리까지만 표시하되, 둘째 자리의 숫자에 관계없이 항상 내림을 해야 합니다. 이러한 요구 사항을 충족시키려면 ROUND 함수 대신 FLOOR 함수를 사용하여 소수점 아래 두 번째 자리를 내림 처리한 후, 10으로 나누어 원하는 결과를 얻을 수 있습니다.

 

다만, SQL Server에서 FLOOR 함수는 소수점 아래를 모두 내림하는 함수이므로, 먼저 값을 10배 증가시켜 소수점 두 번째 자리를 정수 부분으로 만들고, FLOOR 함수를 적용한 후 다시 10으로 나누어 원래의 스케일로 되돌리는 처리가 필요합니다. 

 

SELECT FLOOR(2.36888* 10) / 10

 

결과 : 2.300000

 

 

그러면 세번째 자리에서 버림을 할려면 어떻게 해야 할까요? 먼저 값을 100 배 증가시켜 소수점 두 번째 자리를 정수 부분으로 만들고, FLOOR 함수를 적용한 후 다시 100 으로 나누어 원래의 스케일로 되돌리는 처리작업을 하면 됩니다.

 

SELECT FLOOR(2.36888 * 100) / 100

 

결과 : 2.360000

 

 

 

 

 

 

 

수치 연산 함수(Transact-SQL)

 

https://learn.microsoft.com/ko-kr/sql/t-sql/functions/mathematical-functions-transact-sql?view=sql-server-ver16 

 

수치 연산 함수(Transact-SQL) - SQL Server

수치 연산 함수(Transact-SQL)

learn.microsoft.com