MS SQL Server의 형식 번호(백분율)
소수점 두 자리를 가진 숫자를 단순히 백분율로 포맷하려고 합니다.37을 38로 나눈 값(일명 .973684210526315789)이라면 SQL 출력에서 97.36%를 표시하고 싶습니다.응용프로그램에서 형식 지정을 수행하는 것이 권장되지만 이는 자동 내보내기를 위한 것입니다.이것은 SQL Server 2008을 사용하는 것입니다.
제가 지금 가지고 있는 것은 다음과 같습니다.
select CONVERT(VARCHAR(50),cast(37 as decimal)/cast(38 as decimal)*100)+' %' AS [%]
어떤 기능이든 다양한 파라미터가 무엇인지 설명해주시면 도움이 될 것 같습니다.
SQL Server 2012 이상에는 이 기능이 있습니다.당신은 그것을 통과할 수 있습니다.'P'백분율에 대한 매개 변수입니다.예:
SELECT FORMAT((37.0/38.0),'P') as [Percentage] -- 97.37 %
소수점 정밀도 백분율을 지원하려면 다음을 사용합니다.P0소수점 이하가 아닌 경우(1987-1987) 또는P3소수점 이하 3개(97.368%).
SELECT FORMAT((37.0/38.0),'P0') as [WholeNumberPercentage] -- 97 %
SELECT FORMAT((37.0/38.0),'P3') as [ThreeDecimalsPercentage] -- 97.368 %
M.알리의 대답은 다음과 같이 수정될 수 있습니다.
select Cast(Cast((37.0/38.0)*100 as decimal(18,2)) as varchar(5)) + ' %' as Percentage
SQL Server의 새 버전에서 FORMAT 기능을 사용하는 것이 훨씬 간단하고 훨씬 더 많은 제어를 가능하게 합니다.
FORMAT(yournumber, '#,##0.0%')
이 기능의 이점은 수천 개의 구분 기호와 같은 추가 항목을 제어할 수 있으며 숫자와 '%' 사이에 공백을 둘 수 없다는 것입니다.
SELECT cast( cast(round(37.0/38.0,2) AS DECIMAL(18,2)) as varchar(100)) + ' %'
RESULT: 0.97 %
모든 SQL 서버 버전에 대해
SELECT CAST(0.973684210526315789 * 100 AS DECIMAL(18, 2))
제기될 수 있는 문제는 반올림 문제입니다.
.973684210526315789*100 -> 97.37 False
.973684210526315789*100 -> 97.36 True
두 가지 접근 방식이 있습니다.String Functions그리고.Numerical Functions
String Functions반올림 문제를 피할 수 있습니다. 다음과 같은 기능을 사용합니다.CAST(등가)CONVERT) 및LEFT
SELECT LEFT(Cast(.973684210526315789*100 AS VARCHAR(100)), 5) + ' %'
SELECT LEFT(CONVERT(VARCHAR(100), .973684210526315789*100), 5) + ' %'
Numerical Functions사용을 피하기 위해 반올림 문제를 가져올 수 있습니다.ROUND기능.
SELECT LEFT(Round(.973684210526315789*100, 2, 1), 5) + ' %'
사용하지 않기 위해LEFT함수(문자열 함수) 사용DECIMAL(18,2)그리고.NUMERIC(18, 2)주조와 전환으로
SELECT Concat(Cast(Round(.973684210526315789 * 100, 2, 1) AS DECIMAL(18, 2)),' %')
SELECT Concat(CONVERT(NUMERIC(10, 2), Round(.973684210526315789 * 100, 2, 1)),' %')
추가로 사용할 수 있습니다.FORMAT,###.##그리고.00.00정수 부분 및 분수 부분과 유사합니다.###.##보다 우선되어야 합니다.00.000 값을 피할 수 있기 때문에
SELECT FORMAT(Round(.973684210526315789*100, 2, 1), '######.#####')+ ' %' ---> 97.36%
SELECT FORMAT(Round(.973684210526315789*100, 2, 1), '00000.0000')+ ' %' ---> 00097.3600%
SELECT FORMAT(Round(.973684210526315789*100, 2, 1), '00.00')+ ' %' ---> 97.36%
이 문제를 해결하기 위해 도전했습니다.댓글 5번 (M)Ali)가 요청했습니다. -- "필요한 답변은 97.36%(0.97%가 아님)입니다." 그래서 저는 3번 게시물(sqluser)과 제 솔루션을 비교하는 사진을 첨부합니다.(Mac에서 postgre_sql을 사용하고 있습니다.)

언급URL : https://stackoverflow.com/questions/30089490/format-number-as-percent-in-ms-sql-server
'programing' 카테고리의 다른 글
| 레일에서 활성 레코드의 기본 표준 시간대를 변경하는 방법은 무엇입니까? (0) | 2023.06.25 |
|---|---|
| 팬더를 사용하여 python에서 Excel 파일 읽기 (0) | 2023.06.25 |
| 팬더 시리즈를 데이터 프레임으로 변환 (0) | 2023.06.25 |
| 여러 컨트롤러를 사용하는 Spring Boot API? (0) | 2023.06.25 |
| 깃허브에 있는 요지에 대해 풀 요청을 할 수 있습니까? (0) | 2023.06.25 |