Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 22 January 2021 16:02

tevrard
Participant assidu
Date d'inscription: 23 May 2016
Messages: 319

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 smile

Hors ligne

 

#2 Fri 22 January 2021 17:11

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

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: 319

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: 1536

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: 319

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

 

Pied de page des forums

Powered by FluxBB