​"/> ​">

Heim >Backend-Entwicklung >PHP-Tutorial >Teilen Sie Beispiele für die Zahlenformatierung in SQL

Teilen Sie Beispiele für die Zahlenformatierung in SQL

零下一度
零下一度Original
2017-06-28 15:41:392227Durchsuche

Verwenden Sie SQL-Anweisungen, um doppelte Daten zu formatieren. Entfernen Sie beispielsweise nur die beiden Ziffern nach dem Komma
Eins. Hauptmethode

--nimm die Zahl vor der Dezimalstelle, ohne Berücksichtigung der Rundung
select left('30000.72234', charindex('.', '30000.72234')-1)
wobei: charindex ('.', '30000.72234') um die Position des Dezimalpunkts zu erhalten; -1 bedeutet alles vor dem Dezimalpunkt. Wenn Sie n nach dem Dezimalpunkt erhalten möchten, schreiben Sie einfach +n. Es ist ziemlich nützlich.

--Trennen Sie alle drei Ziffern durch Kommas, lassen Sie zwei Dezimalstellen stehen und berücksichtigen Sie das Runden nicht.
wählen Sie „convert(varchar, cast(round(30000.72234,0) as money), 1)“ aus

--Trennen Sie alle drei Ziffern durch Kommas und lassen Sie keine Dezimalstellen übrig. Erwägen Sie das Runden.
select left(convert(varchar, cast(round(30000.72234,0) as money), 1) , charindex('.', konvertieren( varchar, cast(round(30000.72234,0) als Geld), 1))-1)


zwei. Vergleich von CAST und ROUND
1.
SELECT CAST('123.456' als Dezimalzahl) erhält 123 (der Dezimalpunkt wird weggelassen).
Wenn Sie zwei Nachkommastellen erhalten möchten.
Sie müssen das Obige ändern in
SELECT CAST('123.456' as decimal(38, 2))

===>123.46
Es wird automatisch gerundet!

2.
SELECT ROUND(123.75633, 2, 1),
ROUND(123.75633, 2)
Die beiden durch die obige SQL erhaltenen Werte sind unterschiedlich : 123.75000, letzteres ist: 123.76000.
Weil Ersteres vor dem Runden abgeschnitten wurde, so dass zwei Nachkommastellen übrig blieben.
Letzteres wird nicht abgefangen, wenn es gerundet wird, erhält es natürlich 123,76000


Problem: Es ist notwendig, das Verhältnis des in der Oracle-Datenbank abgefragten Werts zu berechnen. SQL ähnlich dem Folgenden:
Wählen Sie Round((discount/Amount),2) from dual;

Die auf diese Weise berechneten Zahlen können die meisten Anforderungen erfüllen. Bei Zahlen unter 1 tritt jedoch ein Problem auf: Es werden Daten ähnlich .45 angezeigt. Die 0 vor 0,45 ist weg.

Im Folgenden werden zwei Methoden zur Lösung des Problems fehlender Nullen zusammengefasst.

Die erste Lösung:
SELECT DECODE (TRUNC (1/100),0, REPLACE (1/100, '.', '0.'),TO_CHAR (1/100))
VON DUAL;

Sie müssen nur 1/100 durch den Prozentsatz ersetzen, den Sie benötigen.

Zweite Lösung:
SELECT RTrim(To_Char(1/100,'FM99999999990.9999'),'.') FROM dual;

Die Ersetzungsmethode ist die gleiche wie oben.

Detaillierter Vergleich der beiden Methoden:

Die erste Formel ist komplizierter, kann aber mit allgemeinen Zahlenwerten umgehen.

Das zweite sieht einfach aus, aber die Anzahl der Ziffern im formatierten Wert muss größer sein als die Anzahl der Ziffern in der Berechnung. Beispiel: SELECT RTrim(To_Char(200,'FM90.9999'),'.') FROM dual; Der angezeigte Wert ist ########, da er den Formatierungsbereich überschritten hat.

-----

Ich habe festgestellt, dass der Wert von Feld a in Tabelle tb 0,4286 beträgt ? Es kann in einen Prozentsatz von 42,9 % umgewandelt werden (behalten Sie eine Dezimalstelle nach dem Komma bei)
Zum Beispiel
wählen Sie a aus der Tabelle
0,4286
Das Ergebnis, das ich erhalten möchte, ist
42,9 %

SQL-Code

select cast(cast(a*100 as decimal(18,1)) as varchar) + '%' from tb


Das obige ist der detaillierte Inhalt vonTeilen Sie Beispiele für die Zahlenformatierung in SQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn