sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Error sintaxis de entrada no válida para un entero para un no entero?

Su entrada falla con un error de sintaxis en Constructor ARRAY incluso antes de llegar a resolución de tipo de función - donde obtendrá más mensajes de error debido a otras discrepancias de tipos una vez que elimine el constructor ARRAY que no debería estar en la llamada.

Su solución es pasar parámetros separados del tipo coincidente , no una matriz. El resto es solo una explicación de lo que vimos.

Lo que realmente sucedió

Una matriz solo puede incluir valores del mismo tipo, pero su entrada mezcla constantes numéricas con un literal de cadena no numérico , que no se puede resolver.

Si desea que se resuelva en text[] (matriz de text ), debe proporcionar literales de cadena como este:

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

O una matriz literal directamente, así:

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

Pero una vez que inicia un constructor ARRAY con constantes numéricas, solo se pueden agregar tipos numéricos. O al menos cadenas literales con contenido que puede ser forzado al mismo tipo. podrías :

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

... resultando en int[] . O:

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

O incluso:

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

... ambos resultan en numeric[] .

Pero ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V'] es ilegal y con razón.

Las reglas exactas de resolución de tipos para constructores de arreglos se pueden encontrar en este capítulo del manual:"Conversión de tipo" - "UNIÓN, CASO y construcciones relacionadas" . Tu viaje termina en:

Dado que el literal de cadena 'WwLEA6XZ0V' no se puede convertir a integer .