Auch wenn Oracle Database einen TO_CHAR(number)
hat Funktion, mit der wir Zahlen formatieren können, bietet sie kein Formatelement für das Prozentzeichen.
Wenn wir also eine Zahl als Prozentsatz in Oracle Database formatieren möchten, müssen wir das Prozentzeichen und die Zahl verketten.
Beispiel
Wir können den CONCAT()
verwenden Funktion zum Verketten der Zahl und des Prozentzeichens.
Wir können immer noch TO_CHAR(number)
verwenden Funktion, um die Zahl so zu formatieren, dass sie die gewünschten Dezimalstellen, führende Nullen (oder nicht) usw. enthält:
SELECT CONCAT(TO_CHAR(18, 'fm00D00'), '%')
FROM DUAL;
Ergebnis:
18.00%
Hier habe ich den 0
verwendet Formatelement, was bedeutet, dass die Ziffernposition immer gedruckt wird, auch wenn sie eine führende/nachgestellte Null enthält.
Ich habe auch den fm
verwendet Formatmodifikator, um führende/nachgestellte Nullen oder Leerzeichen zu unterdrücken.
Hier ist es mit einigen anderen Formatmodellen:
SELECT
CONCAT(TO_CHAR(7, 'fm00'), '%') AS "1",
CONCAT(TO_CHAR(7, 'fm99'), '%') AS "2",
CONCAT(TO_CHAR(7.4567, 'fm0D00'), '%') AS "3",
CONCAT(TO_CHAR(7, 'fm0D00'), '%') AS "4"
FROM DUAL;
Ergebnis:
1 2 3 4 ______ _____ ________ ________ 07% 7% 7.46% 7.00%
Wir können bei Bedarf eine Berechnung mit der Zahl durchführen:
SELECT
CONCAT(TO_CHAR(18 * 0.1, 'fm99D00'), '%') AS "1",
CONCAT(TO_CHAR(0.18 * 100, 'fm99D00'), '%') AS "2"
FROM DUAL;
Ergebnis:
1 2 ________ _________ 1.80% 18.00%
In diesem Fall habe ich die 9
eingefügt format-Element, sodass alle führenden Nullen weggelassen wurden.
Weglassen des TO_CHAR()
Funktion
Wenn wir die Zahl nicht anders formatieren müssen, als sie in ein Prozentformat umzuwandeln, brauchen wir nicht einmal TO_CHAR()
Funktion:
SELECT CONCAT(18, '%')
FROM DUAL;
Ergebnis:
18%
Der Verkettungsoperator
Eine andere Möglichkeit, die Zahl und das Prozentzeichen zu verketten, ist die Verwendung des Verkettungsoperators (||
):
SELECT 18 || '%'
FROM DUAL;
Ergebnis:
18%
Und hier ist es mit dem TO_CHAR()
Funktion für zusätzliche Formatierung hinzugefügt:
SELECT TO_CHAR(18, 'fm00D00') || '%'
FROM DUAL;
Ergebnis:
18.00%