sql >> Databasteknik >  >> RDS >> PostgreSQL

Fel ogiltig ingångssyntax för heltal för ett icke-heltal?

Din inmatning misslyckas med ett syntaxfel i ARRAY-konstruktör innan du ens kommer till upplösning av funktionstyp - där du kommer att få fler felmeddelanden på grund av andra typer som inte matchar när du tar bort ARRAY-konstruktorn som inte alls borde vara med i anropet.

Din lösning är att skicka separata parametrar av matchande typ , inte en uppsättning. Resten är bara en förklaring av vad vi såg.

Vad hände egentligen

En array kan bara innehålla värden av samma typ, men din indata blandar numeriska konstanter med en icke-numerisk sträng bokstavlig , som inte kan lösas.

Om du vill att det ska lösas till text[] (matris med text ), måste du ange bokstavliga strängar som så:

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

Eller en array literal direkt, som så:

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

Men när du väl startar en ARRAY-konstruktor med numeriska konstanter är det bara numeriska typer som är lagliga att lägga till. Eller åtminstone sträng bokstaver med innehåll som kan tvingas till samma typ. Du kunde :

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

... vilket resulterar i int[] . Eller:

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

Eller till och med:

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

... båda resulterar i numeric[] .

Men ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] är olagligt och med rätta.

De exakta reglerna för typupplösning för arraykonstruktörer finns i detta kapitel i manualen:"Typomvandling" - "UNION, CASE och relaterade konstruktioner" . Din resa slutar kl.:

Eftersom strängen bokstavlig 'WwLEA6XZ0V' kan inte konverteras till integer .




  1. Konvertera MySQL Resultset från rader till kolumner

  2. Doctrine DQL join på nullbara kolumner

  3. gå med kommaavgränsad datakolumn

  4. Trace Flag 2389 och den nya Cardinality Estimator