sql >> Databáze >  >> RDS >> PostgreSQL

Chyba neplatná vstupní syntaxe pro celé číslo pro jiné než celé číslo?

Váš vstup selže s chybou syntaxe v Konstruktor ARRAY než se vůbec dostanete k rozlišení typu funkce - kde po odstranění konstruktoru ARRAY, který by ve volání vůbec neměl být, budete dostávat další chybové zprávy kvůli jiným neshodám typů.

Řešením je předat samostatné parametry typu shody , ne pole. Zbytek je jen vysvětlení toho, co jsme viděli.

Co se skutečně stalo

Pole může obsahovat pouze hodnoty stejného typu, ale váš vstup míchá numerické konstanty s nenumerickým řetězcovým literálem , kterou nelze vyřešit.

Pokud chcete, aby byl přeložen na text[] (pole text ), musíte zadat řetězcové literály takto:

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

Nebo přímo literál pole, například takto:

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

Jakmile však spustíte konstruktor ARRAY s číselnými konstantami, je legální přidat pouze číselné typy. Nebo alespoň řetězcové literály s obsahem, který lze přinutit ke stejnému typu. Mohli byste :

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

... výsledkem je int[] . Nebo:

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

Nebo dokonce:

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

... výsledkem obou je numeric[] .

Ale ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] je nezákonné a oprávněně.

Přesná pravidla rozlišení typů pro konstruktory polí naleznete v této kapitole manuálu:"Konverze typu" - "UNION, CASE a související konstrukce" . Vaše cesta končí v:

Od řetězcového literálu 'WwLEA6XZ0V' nelze převést na integer .




  1. Jak mohu dohlížet na můj replikační server MySQL?

  2. Řetězec MySQL na DATE / TIME nebo TIMESTAMP

  3. Funkce SCHEMA() v MySQL

  4. Jak se připojit k localhost PostgreSQL na Mac pomocí PSequel GUI?