DB

[MSSQL] 소수점관리 반올림(ROUND), 올림(CEILING), 내림(FLOOR), FORMAT함수를 사용한 0 자릿수 채우기, 문자열 반복 REPLICATE 함수


MSSQL 소수점관리 반올림, 올림, 내림 관련하여 ROUND, CEILING, FLOOR 함수에 대한 사용법을 알아보자.

다음과 같이 소숫점 자리를 제외한 정수값을 리턴받는 자바스크립트 예시가 있다.

const rate = Math.round(e.actCnt > 0 ? (e.actCnt / e.totActCnt) * 100 : 0);

자바스크립트에서 ROUND 처리의 결과와 MSSQL의 CEILING 함수를 사용한 리턴 결과는 동일하게 소숫점 자리가 없는 정수이지만 결과값이 다른 경우가 발생한다. 데이터를 통일해야하는 경우 쿼리에서 값을 계산 후 가져와서 사용하자.

ROUND 함수 사용법 (반올림)

ROUND (대상 값, 반올림 자릿수, 반올림 여부(0은 반올림, 1은 내림))

[기본 예제]

반올림 자릿수에 양수 값은 소수점 기준으로 반올림한다.

반올림 자릿수에 음수 값은 정수 기준으로 반올림한다.

[응용하여 퍼센트 값 구하는 예제]

SELECT 
CONVERT(VARCHAR,
	ROUND(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100), 0)
) + '%' AS [0번째 자리로 지정하면 소숫점 자리 없는 반올림된 정수 값]

, CONVERT(VARCHAR,
	ROUND(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100), 1)
) + '%' AS [첫번째 자리에서 반올림]

,CONVERT(VARCHAR,
	ROUND(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100), 2)
) + '%' AS [두번째 자리에서 반올림]

,CONVERT(VARCHAR,
	ROUND(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100), 3)
) + '%' AS [세번째 자리에서 반올림]

CEILING 함수 사용법 (올림)

CEILING은 정수 값만 리턴한다

SELECT 
CONVERT(VARCHAR,
	ROUND(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100), 0)
) + '%' AS [ROUND함수 사용 0번째 자리로 지정하면 소숫점 자리 없는 반올림된 정수 값]

,CONVERT(VARCHAR,
	CEILING(((CONVERT(FLOAT,2) / CONVERT(FLOAT, 30 )) * 100))
) + '%' AS [CEILING함수 사용 결과 정수값]

FLOOR  함수 사용법 (내림)

FLOOR 함수는 CEILING함수와 동일하게 정수값만 리턴한다.

FORMAT 함수 사용법

 소수점 6자리까지 표현 뒷자리 0값 제거

SELECT FORMAT(12.456000, '##0.######')
SELECT FORMAT(12.456001, '##0.######')


소수점 2자리까지 반올림으로 표현


소수점 6자리까지 0포함 전부 표현

정수값에 ##0 으로 사용하면 정수값이 0미만 일시 정수값 0으로 표현
정수값에 ### 으로 사용하면 정수값이 0미만 일시 정수값 미표현

FORMAT함수를 사용한 0 자릿수 채우는 방법

FORMAT(대상값, 자리수)

1) 자리수 만큼 0을 넣을 경우 예) '00000'

2) D뒤에 자리수를 지정하는 경우 예) 'D5'

MSSQL 문자열 반복 REPLICATE 함수를 사용한 0 자릿수 채우는 방법

REPLICATE 는 입력된 문자열을 지정한 횟수만큼 반복하여 표시해준다. 포맷함수와 차이점은 문자열을 붙일 수 있다.

[예제 쿼리]

SELECT '홍길동' AS NAME
, '서울시 영등포구 여의도동 여의대로 108' AS ADDRESS
,  LEFT('서울시 영등포구 여의도동 여의대로 108',7) + REPLICATE('.', 5) AS [주소 줄임]

[실행결과]

LEFT 함수는 문자열의 왼쪽부터 일정수치까지의 문자열을 자르는 함수이다.

[마이크로소프트 문서]

Leave a Reply

error: Content is protected !!