Aby sformatować liczbę jako walutę w Postgresie, możesz przekonwertować ją na typ danych money lub użyć to_char()
aby przekonwertować go na tekst zawierający odpowiedni symbol waluty.
To oczywiście zakłada, że numer nie jest już przechowywany przy użyciu typu pieniężnego.
Poniżej znajdują się przykłady każdej z tych opcji.
Konwertuj na pieniądze
Oto przykład konwersji liczby na typ danych pieniężnych.
SELECT cast(12 as money);
Wynik:
$12.00
Oto kolejny przykład, tym razem z użyciem większej ilości.
SELECT cast(123456.78 as money);
Wynik:
$123,456.78
Konwertuj z liczby zmiennoprzecinkowej
Odradza się używanie liczb zmiennoprzecinkowych do obsługi pieniędzy ze względu na potencjalne błędy zaokrąglania. Jeśli jednak musisz to zrobić, możesz najpierw przekonwertować na liczby, a następnie na pieniądze.
SELECT '123456.78'::float8::numeric::money;
Wynik:
$123,456.78
Jeśli spróbujesz przekonwertować bezpośrednio z liczb zmiennoprzecinkowych na pieniądze, pojawi się błąd.
SELECT '123456.78'::float8::money;
Wynik:
ERROR: cannot cast type double precision to money
Konwertuj na tekst
Oto przykład użycia to_char()
aby przekonwertować wartość na tekst z dołączonym symbolem waluty.
SELECT to_char(12, 'L99D99');
Wynik:
$12.00
Tutaj zarówno symbol waluty, jak i miejsce dziesiętne używają aktualnego języka.
Ciąg formatu dla to_char()
będą musiały być odpowiednie do oczekiwanej kwoty.
Na przykład, jeśli kwota może sięgać setek tysięcy, bardziej odpowiedni byłby następujący ciąg formatu.
SELECT to_char(123456.78, 'L999G999D99');
Wynik:
$123,456.78
W tym przypadku dodałem G
wzorzec szablonu dla separatora grup uwzględniającego ustawienia regionalne (nazywanego również „separatorem tysięcy”). Mogłem użyć przecinka (,
), ale nie uwzględniałoby to ustawień regionalnych.
I ponownie dodałem D
wzorzec szablonu dla kropki dziesiętnej uwzględniającej ustawienia regionalne.
Oto, co się stanie, jeśli usunę te dwa wzorce szablonów z ciągu formatu.
SELECT to_char(123456.78, 'L999999');
Wynik:
$ 123457
Nieznaczne zera
Możesz użyć 0
zamiast 9
zachować nieznaczne zera.
9
wzorzec szablonu usuwa nieznaczne zera, podczas gdy 0
wzór szablonu nie.
Oto przykład ilustrujący różnicę między nimi.
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
Wynik:
L9999 | L0000 --------+-------- $ 12 | $ 0012
Tryb wypełniania
Istnieje przydatny modyfikator wzorców szablonów o nazwie FM
. To jest dla „trybu wypełniania” i eliminuje końcowe zera i wiodące spacje.
Dlatego możemy użyć tego modyfikatora do zmodyfikowania poprzedniego przykładu.
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
Wynik:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
Zauważ, że pominięto początkowe spacje między znakiem dolara a liczbą.