PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore sintassi di input non valida per intero per un non intero?

L'input non riesce con un errore di sintassi in Costruttore ARRAY prima ancora di arrivare a risoluzione del tipo di funzione - dove riceverai più messaggi di errore a causa di altre mancate corrispondenze di tipo una volta rimosso il costruttore ARRAY che non dovrebbe essere affatto nella chiamata.

La tua soluzione è passare parametri separati di tipo corrispondente , non un array. Il resto è solo una spiegazione di ciò che abbiamo visto.

Cosa è successo davvero

Un array può includere solo valori dello stesso tipo, ma il tuo input mescola costanti numeriche con un stringa letterale , che non può essere risolto.

Se vuoi che si risolva in text[] (matrice di text ), devi fornire stringhe letterali in questo modo:

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

O un array letterale direttamente, in questo modo:

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

Ma una volta avviato un costruttore ARRAY con costanti numeriche, solo i tipi numerici possono essere aggiunti. O almeno letterali stringa con contenuto che può essere forzato allo stesso tipo. Potresti :

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

... risultando in int[] . Oppure:

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

O anche:

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

... entrambi risultanti in numeric[] .

Ma ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] è illegale e giustamente.

Le regole esatte della risoluzione dei tipi per i costruttori di array possono essere trovate in questo capitolo del manuale:"Conversione del tipo" - "UNION, CASE e costrutti correlati" . Il tuo viaggio termina alle:

Poiché la stringa letterale 'WwLEA6XZ0V' non può essere convertito in integer .