PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak formatować liczby jako walutę w PostgreSQL

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ą.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generowanie szeregów czasowych między dwiema datami w PostgreSQL

  2. Oblicz następny klucz podstawowy - o określonym formacie

  3. Jak pobrać komentarz bazy danych PostgreSQL?

  4. Odmowa uprawnień podczas próby importowania pliku CSV z PGAdmin

  5. Jak uzyskać numer wiersza w PostgreSQL