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

Jak działa funkcja to_number() w PostgreSQL

W PostgreSQL możesz użyć to_number() funkcja do konwersji ciągu na wartość liczbową.

Dokładniej, konwertuje ciąg reprezentujący liczbę na wartość liczbową.

Na przykład, jeśli masz $1,234.50 jako ciąg, możesz użyć to_number() aby przekonwertować to na rzeczywistą liczbę, która używa liczby typ danych.

Składnia

Składnia wygląda tak:

to_number(text, text)

Gdzie pierwszy argument jest ciągiem reprezentującym liczbę, a drugi argument definiuje szablon, którego używa pierwszy argument.

Przykład

Oto podstawowy przykład do zademonstrowania.

SELECT to_number('80', '99');

Wynik:

80

W tym przypadku użyłem 99 jako szablon. Każdy 9 jest określany jako „wzorzec szablonu”. 9 wzór szablonu reprezentuje pozycję cyfry. Użyłem dwóch, ponieważ chciałem, aby zawierały obie cyfry.

Oto, co się stanie, jeśli usunę jeden z 9 s.

SELECT to_number('80', '9');

Wynik:

8

Dlatego ważne jest, aby w szablonie zawrzeć odpowiednią liczbę wzorów szablonów.

Separator grupy i punkt dziesiętny

Pracując z większymi liczbami i/lub liczbami z ułamkami sekund, musisz uwzględnić wzorce szablonów, które określają separator grup i/lub kropkę dziesiętną.

Można to zrobić na dwa sposoby.

Pierwszą opcją jest dosłownie wpisanie przecinka i kropki dziesiętnej.

SELECT to_number('7,000.25', '9,999.99');

Wynik:

7000.25

Drugą opcją jest użycie wersji uwzględniających lokalizację. Są to G dla separatora grup (separator tysięcy) i D dla kropki dziesiętnej.

Zatem poprzedni przykład można przepisać w następujący sposób:

SELECT to_number('7,000.25', '9G999D99');

Wynik:

7000.25

Symbol waluty

L wzorzec szablonu reprezentuje symbol waluty uwzględniający ustawienia regionalne.

SELECT to_number('$7,000.25', 'L9G999D99');

Wynik:

7000.25

Typ zwrotu

Zwracana wartość funkcji to_number() funkcja jest numeryczna.

Możesz sprawdzić typ zwracany za pomocą pg_typeof() funkcja.

SELECT pg_typeof(to_number('$7,000.25', 'L9G999D99'));

Wynik:

numeric

Nieoczekiwane wyniki?

Ważne jest, aby szablon był prawidłowy. W przeciwnym razie możesz uzyskać nieoczekiwane wyniki.

Oto przykład tego, co się stanie, jeśli po prostu zapomnę dodać L wzór szablonu z wcześniejszego przykładu.

SELECT to_number('$7,000.25', '9G999D99');

Wynik:

7000

Więc ponieważ zapomniałem dołączyć L wzorzec szablonu (dla waluty), to spowodowało brak synchronizacji całego szablonu z numerem, co skutkowało G ignorowane, a także D .

Żeby było jasne, to znowu w porównaniu z poprawnym szablonem.

SELECT 
  to_number('$7,000.25', 'L9G999D99') AS "Right",
  to_number('$7,000.25', '9G999D99') AS "Wrong";

Wynik:

   Right | Wrong
---------+-------
 7000.25 | 7000

to_number() a cast()

to_number() funkcja służy głównie do obsługi formatów wejściowych, których nie można przekonwertować przez proste rzutowanie. Dlatego generalnie nie jest konieczne w przypadku standardowych reprezentacji liczbowych.

Więc pierwszy przykład na tej stronie można było wykonać za pomocą cast() .

SELECT cast('80' AS NUMERIC);

Wynik:

80

Ale zaczynamy wpadać w kłopoty, gdy sytuacja staje się nieco bardziej skomplikowana.

SELECT cast('$7,000.25' AS NUMERIC);

Wynik:

ERROR: invalid input syntax for type numeric: "$7,000.25"
LINE 1: SELECT cast('$7,000.25' AS NUMERIC);

Więc to_number() został zaprojektowany głównie z myślą o sytuacjach takich jak ta.

Pełna lista wzorców i modyfikatorów szablonów

Postgres zawiera znacznie więcej szablonów i modyfikatorów.

Można ich również używać podczas formatowania wartości numerycznych (na przykład przy użyciu funkcji to_char() funkcja zwracająca sformatowany ciąg reprezentujący liczbę).

Zobacz Wzorce i modyfikatory szablonów do formatowania liczb w PostgreSQL, aby uzyskać pełną listę.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przywileje i bezpieczeństwo PostgreSQL — blokowanie schematu publicznego

  2. Jak utworzyć sumę kroczącą okresu rozliczeniowego

  3. Podobne ciągi UTF-8 dla pola autouzupełniania

  4. Typowe błędy podczas migracji baz danych PostgreSQL ze środowiska lokalnego do AWS RDS

  5. Django+Postgres:bieżąca transakcja jest przerwana, polecenia ignorowane do końca bloku transakcji