sql >> Database teknologi >  >> RDS >> Sqlserver

4 måder at konvertere et tal til en procentdel i SQL Server (T-SQL)

Her er 4 måder at konvertere et tal til en procentværdi i SQL Server.

Strengt taget "konverterer" vi det faktisk ikke til en procentdel. Vi formaterer tallet som en procentdel. Men for at gøre det skal vi konvertere tallet fra en numerisk datatype til en streng.

Her er 4 måder at gøre det på.

Eksempel 1 – FORMAT()-funktionen

Det mest oplagte valg at bruge er FORMAT() fungere. Dette giver dig mulighed for at vise tal og datoer i et bestemt format.

Her er et eksempel på brug af denne funktion til at vise et tal som en procentdel:

SELECT FORMAT(55, 'P') Result;

Resultat:

+------------+
| Result     |
|------------|
| 5,500.00 % |
+------------+

Bemærk, at fire nuller blev tilføjet til vores værdi (to før decimaltegnet og to efter).

Følgende ville være påkrævet for at gøre dette til 55 procent:

SELECT FORMAT(.55, 'P') Result;

Resultat:

+----------+
| Result   |
|----------|
| 55.00 %  |
+----------+

Hvis tallet er den faktiske procentværdi, du ønsker, kan du gøre dette:

SELECT FORMAT(55 * .01, 'P') Result;

Resultat:

+----------+
| Result   |
|----------|
| 55.00 %  |
+----------+

Du kan også fjerne brøkdelen ved at tilføje et nul til formatspecifikationen:

SELECT FORMAT(.55, 'P0') Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Hvis det er nødvendigt, kan du også tilføje flere decimaler:

SELECT FORMAT(.55123456, 'P7') Result;

Resultat:

+--------------+
| Result       |
|--------------|
| 55.1234560 % |
+--------------+

Eksempel 2 – KONVERT()-funktionen

Du kan alternativt bruge CONVERT() funktion til at konvertere tallet til en streng, og tilføj derefter et procenttegn til slutningen.

Dette kan virke lidt unødvendigt i betragtning af hvor nemt det forrige eksempel gjorde det, men FORMAT() funktion blev kun introduceret i SQL Server 2012. Derfor er det sådan, du skal gøre det, hvis du bruger en tidligere version af SQL Server.

SELECT CONVERT(VARCHAR(4), 55) + ' %' Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Selvfølgelig, hvis dit nummer er noget som .55 og du har brug for det for at blive vist som 55,00 %, så kan du altid gange det med 100:

SELECT CONVERT(VARCHAR(6), 0.55 * 100) + ' %' Result;

Resultat:

+----------+
| Result   |
|----------|
| 55.00 %  |
+----------+

I dette tilfælde øgede jeg også størrelsen af ​​varchar datatype for at tage højde for de ekstra tegn.

Du kan også fjerne brøkdelen ved at bruge LEFT() funktion:

SELECT CONVERT(VARCHAR(6), LEFT(0.55 * 100, 2)) + ' %' Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Selvom du skal være forsigtig, når du gør dette, da den faktiske værdi kan variere til at være mere eller mindre end 2. I så fald kan du bruge TRIM() funktion til at trimme indledende nuller og/eller efterfølgende prikker:

SELECT CONVERT(VARCHAR(6), TRIM('0,.' FROM LEFT(0.55 * 100, 3))) + ' %' Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Dette er dog ikke perfekt, og FORMAT() funktion giver naturligvis meget mere fleksibilitet med et minimum af kode.

Eksempel 3 – CAST()-funktionen

Vi kan alternativt bruge CAST() funktion for at gøre det samme som det forrige eksempel:

SELECT CAST(55 AS VARCHAR(4)) + ' %' Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Bemærk, at CAST() og CONVERT() bruge lidt forskellige syntakser. I tilfælde af CAST() værdien, der skal castes, kommer først, hvorimod det er omvendt med CONVERT() .

Eksempel 4 – CONCAT() Funktion

Du kan også bruge CONCAT() funktion til at sammenkæde et tal med procenttegnet:

SELECT CONCAT(55, ' %') Result;

Resultat:

+----------+
| Result   |
|----------|
| 55 %     |
+----------+

Denne funktion konverterer implicit alle argumenter til strengtyper før sammenkædning.


  1. MySQL MONTHNAME() fra tal

  2. Cronjob eller MySQL begivenhed?

  3. The Eager Index Spool og The Optimizer

  4. ADD_MONTHS() Funktion i Oracle