2015-05-06 7 views
13

Ich versuche, eine Zahl einfach als Prozent mit zwei Dezimalstellen zu formatieren. Wenn es 37 geteilt durch 38 ist (aka .973684210526315789), würde ich gerne 97,36% in der SQL-Ausgabe anzeigen. Ich weiß, dass es empfohlen wird, die Formatierung in der Anwendung zu tun, dies ist jedoch für einen automatisierten Export. Dies wird mithilfe von SQL Server 2008.Format Nummer als Prozent in MS SQL Server

Hier ist, was ich habe jetzt:

select CONVERT(VARCHAR(50),cast(37 as decimal)/cast(38 as decimal)*100)+' %' AS [%] 

Wenn Sie, was die verschiedenen Parameter sind auch in einer beliebigen Funktion erklären könnte, die hilfreich sein würde.

Antwort

20

M.Ali Antwort als

modifiziert werden
select Cast(Cast((37.0/38.0)*100 as decimal(18,2)) as varchar(5)) + ' %' as Percentage 
+1

Dies ist die beste Antwort, da es mit jeder SQL-Version funktioniert. Genau was benötigt wird. Vielen Dank. – user3513237

40

In SQL Server 2012 und später gibt es die FORMAT() Funktion. Sie können einen 'P' Parameter für den Prozentsatz übergeben. Zum Beispiel:

SELECT FORMAT((37.0/38.0),'P') as [Percentage] -- 97.37 % 

Um support percentage decimal precision, können Sie P0 für keine Dezimalzahlen (Ganzzahl) oder P3 für 3 Dezimalstellen (97,368%) verwenden.

SELECT FORMAT((37.0/38.0),'P0') as [WholeNumberPercentage] -- 97 % 
SELECT FORMAT((37.0/38.0),'P3') as [ThreeDecimalsPercentage] -- 97.368 % 
+1

Sorry, ich ich SQL Server 2008 erwähnt haben sollte verwende, also kann diese Funktion nicht verwendet werden. – user3513237

+0

Oh, gut! In diesem Fall finden Sie diesen Artikel möglicherweise hilfreich, insbesondere Lösung # 1: http://raresql.com/2013/08/04/sql-server-how-to-format-values-as-a-percentage/ – jbeldock

+1

was wenn wir nur 97% wollen. Nur ganze Zahl% –

3
SELECT cast(cast(round(37.0/38.0,2) AS DECIMAL(18,2)) as varchar(100)) + ' %' 

RESULT: 0.97 % 
+2

Die erforderliche Antwort ist 97,36% (nicht 0,97%) – JohnS

1

Und für alle SQL Server-Versionen konnte

SELECT CAST(0.973684210526315789 * 100 AS DECIMAL(18, 2))