#1 Fri 22 January 2021 16:02
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 320
Invalid input syntax et Vue
Bonjour,
je rencontre l'erreur suivante lorsque je passe des données dans une vue :
Code:
ERROR : Invalid input syntax for integer : "31/0"
Je suis certain que le fichier n'est pas en cause ( fichiers de sources différentes et fiables qui génèrent cette erreur et import ok quand le trigger faisant appel à la vue en question est désactivé).
Voici la définition de la vue a priori fautive :
Code:
WITH RECURSIVE t(code_depart, code_arrivee, date_eff, nb_boucles) AS ( SELECT sub_dreal_logement.code_commune::character(5) AS code_commune, sub_dreal_logement.code_commune::character(5) AS code_commune, 2006 AS date_eff, 1 FROM bdd_territoires.sub_dreal_logement UNION SELECT t.code_depart, r.com_ap, "left"(r.date_eff::text, 4)::integer AS "left", t.nb_boucles + 1 FROM listes_fonctionnelles.ref_mouvements_communes r JOIN t ON t.code_arrivee = r.com_av WHERE "left"(r.date_eff::text, 4)::integer > t.date_eff ), tc AS ( SELECT t.code_depart, max(t.nb_boucles) AS nb_boucles FROM t GROUP BY t.code_depart ORDER BY t.code_depart ), table_sortie AS ( SELECT DISTINCT t.code_depart, t.code_arrivee FROM t JOIN tc ON t.code_depart = tc.code_depart AND t.nb_boucles = tc.nb_boucles ORDER BY t.code_arrivee ) SELECT ts.code_arrivee AS code_commune, t2.lib_commune, t1.nb_permis_construire, t1.nb_permis_amenager, t1.nb_declaration_prealable, t1.nb_permis_demolir, t1.annee_obs, t1.territoire FROM table_sortie ts LEFT JOIN bdd_territoires.sub_dreal_logement t1 ON t1.code_commune::bpchar = ts.code_depart LEFT JOIN listes_fonctionnelles.ref_echelle_geographique t2 ON ts.code_arrivee = t2.code_commune WHERE t2.code_region = '27'::bpchar;
L'objectif de cette vue est de mettre à jour la géographie des données d'une table source (ici sub_dreal_logement (les logements fournis par la dreal)) vers la dernière géographie disponible.
La table de référence pour la dernière géographie disponible est ref_echelle_geographique.
je fais aussi appel a la table ref_mouvements_communes qui retrace l'historique des évolutions communales est issue de l'insee.
Voila je ne comprend comment je génère cette erreur... je vous soumets mon problème en espérant que quelqu'un puisse m'aider
Hors ligne
#2 Fri 22 January 2021 17:11
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Invalid input syntax et Vue
Bonjour,
Je ne vois qu'un cast vers un int dans votre code: "left"(r.date_eff::text, 4)::integer
Je checkerais la table ref_mouvements_communes pour la colonne date_eff. Elle doit contenir une mauvaise valeur.
Nicolas
Hors ligne
#3 Tue 26 January 2021 10:23
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 320
Re: Invalid input syntax et Vue
J'ai un format de date en DD/MM/YY dans le date_eff de la table ref_mouvements_communes
Je suppose que le format YY est ce qui pose problème.
Est ce que qqun dispose d'une routine pour convertir une date DD/MM/YY en DD/MM/YYYY ?
Les années de la table vont de 1944 à 2020
Hors ligne
#4 Tue 26 January 2021 11:22
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Invalid input syntax et Vue
Bonjour,
Regardez du coté de ces fonctions: https://www.postgresql.org/docs/13/func … tting.html
ca permet de faire ce que vous voulez, par ex tester la forme de la date (YY vs YYYY) et appliquer la bon formatage en fonction. Ex:
Code:
select to_date('12/01/2021', 'DD/MM/YYYY'); select to_date('06/11/19', 'DD/MM/YY');
Nicolas
Hors ligne
#5 Fri 29 January 2021 15:25
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 320
Re: Invalid input syntax et Vue
Merci à Nicolas pour l'aide.
Petit couac avec la solution proposée vu que les années antérieures a 1970 passaient en 20XX au lieu de 19XX (ex données en 2050 au lieu de 1950)
Mais bon ce point la est réglé. Merci !
Hors ligne