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

Błąd niepoprawna składnia wejściowa dla liczby całkowitej dla liczby niebędącej liczbą całkowitą?

Wprowadzanie kończy się niepowodzeniem z powodu błędu składni w Konstruktor ARRAY zanim jeszcze dojdziesz do rozwiązania typu funkcji - gdzie otrzymasz więcej komunikatów o błędach z powodu innych niezgodności typów po usunięciu konstruktora ARRAY, który w ogóle nie powinien znajdować się w wywołaniu.

Twoim rozwiązaniem jest przekazanie oddzielnych parametrów pasującego typu , nie tablica. Reszta to tylko wyjaśnienie tego, co widzieliśmy.

Co naprawdę się wydarzyło

Tablica może zawierać tylko wartości tego samego typu, ale miksy wejściowe stałe numeryczne z nienumerycznym literałem ciągu , których nie można rozwiązać.

Jeśli chcesz, aby rozwiązał się na text[] (tablica text ), musisz podać literały łańcuchowe, takie jak:

SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];

Lub bezpośrednio literał tablicowy, na przykład:

SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];

Ale po uruchomieniu konstruktora ARRAY ze stałymi liczbowymi dozwolone jest dodawanie tylko typów liczbowych. Lub przynajmniej literały ciągów z zawartością, którą można przekonwertować na ten sam typ. możesz :

SELECT ARRAY[1004, 2, 1079412, '1'];

... w wyniku int[] . Lub:

SELECT ARRAY[1004, 2, 1079412, 1.0];

Lub nawet:

SELECT ARRAY[1004, 2, 1079412.0, '1.0'];

... obie dają wynik numeric[] .

Ale ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] jest nielegalne i słusznie.

Dokładne zasady rozwiązywania typów dla konstruktorów tablic można znaleźć w tym rozdziale podręcznika:"Konwersja typów" — "UNION, CASE i pokrewne konstrukcje" . Twoja podróż kończy się o:

Ponieważ literał ciągu 'WwLEA6XZ0V' nie można przekonwertować na integer .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z przywracaniem bazy danych Heroku

  2. Jak można używać składni INSERT ... ON CONFLICT (id) DO UPDATE... z identyfikatorem sekwencji?

  3. Połącz wiele wierszy wyników z jednej kolumny w jedną, pogrupuj według innej kolumny

  4. Usuń jedną, nieunikalną wartość z tablicy

  5. Używanie UNNEST z JOIN