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

Fejl ugyldig inputsyntaks for heltal for et ikke-heltal?

Dit input mislykkes med en syntaksfejl i ARRAY-konstruktør før du overhovedet når til opløsning af funktionstype - hvor du vil få flere fejlmeddelelser på grund af andre typer uoverensstemmelser, når du fjerner ARRAY-konstruktøren, som slet ikke burde være i opkaldet.

Din løsning er at videregive separate parametre af matchende type , ikke et array. Resten er blot en forklaring på, hvad vi så.

Hvad skete der egentlig

Et array kan kun indeholde værdier af samme type, men dit input blander numeriske konstanter med en ikke-numerisk streng literal , som ikke kan løses.

Hvis du ønsker at det skal løses til text[] (array af text ), skal du angive strenge bogstaver som sådan:

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

Eller et array direkte, som sådan:

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

Men når du først starter en ARRAY-konstruktør med numeriske konstanter, er det kun numeriske typer, der er lovlige at tilføje. Eller i det mindste streng bogstaver med indhold, der kan tvinges til samme type. Du kunne :

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

... resulterer i int[] . Eller:

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

Eller endda:

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

... begge resulterer i numeric[] .

Men ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] er ulovligt og med rette.

De nøjagtige regler for typeopløsning for array-konstruktører kan findes i dette kapitel af manualen:"Typekonvertering" - "UNION, CASE og relaterede konstruktioner" . Din rejse slutter kl.:

Siden strengen bogstaveligt 'WwLEA6XZ0V' kan ikke konverteres til integer .




  1. MySQL - SELECT WHERE field IN (underforespørgsel) - Ekstremt langsom hvorfor?

  2. psql indstillede standard statement_timeout som bruger i postgres

  3. Sådan optimerer du forespørgslen, hvis jeg allerede bruger GIN-indeks

  4. 6 funktioner til at få dagen, måneden og året fra en dato i SQL Server