PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fehler ungültige Eingabesyntax für Ganzzahl für eine Nicht-Ganzzahl?

Ihre Eingabe schlägt mit einem Syntaxfehler in ARRAY-Konstruktor bevor Sie überhaupt zur Auflösung des Funktionstyps gelangen - wo Sie mehr Fehlermeldungen aufgrund anderer Typkonflikte erhalten, sobald Sie den ARRAY-Konstruktor entfernen, der überhaupt nicht im Aufruf enthalten sein sollte.

Ihre Lösung besteht darin, separate Parameter des übereinstimmenden Typs zu übergeben , nicht eine Anordnung. Der Rest ist nur eine Erklärung dessen, was wir gesehen haben.

Was wirklich passiert ist

Ein Array kann nur Werte desselben Typs enthalten, aber Ihre Eingabe mischt numerische Konstanten mit einem nicht numerischen String-Literal , die nicht aufgelöst werden kann.

Wenn Sie möchten, dass es in text[] aufgelöst wird (Array von text ), müssen Sie Zeichenfolgenliterale wie folgt bereitstellen:

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

Oder direkt ein Array-Literal, etwa so:

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

Aber sobald Sie einen ARRAY-Konstruktor mit numerischen Konstanten starten, dürfen nur noch numerische Typen hinzugefügt werden. Oder zumindest Zeichenfolgenliterale mit Inhalten, die auf denselben Typ gezwungen werden können. Sie könnten :

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

... was zu int[] führt . Oder:

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

Oder sogar:

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

... beide resultieren in numeric[] .

Aber ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] ist illegal und das zu Recht.

Die genauen Regeln der Typauflösung für Array-Konstruktoren finden Sie in diesem Kapitel des Handbuchs:"Typkonvertierung" - "UNION, CASE und verwandte Konstrukte" . Ihre Reise endet um:

Da das Zeichenfolgenliteral 'WwLEA6XZ0V' kann nicht in integer konvertiert werden .