PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/03/2012 15:58:21

mollux
Membre

Requête postgresql

Bonjour j'ai deux requêtes qui passaient en oracle et qui ne passe plus en postgres :

Requête 1 :

Code :Sélectionner tout - Visualiser dans une fenêtre à part123456789101112 SELECT to_char(s.date_synchro, 'YYYY') AS annee,
to_char(s.date_synchro, 'MM') AS mois_chiffre,
to_char(s.date_synchro, 'MONTH') AS mois,
to_char(s.date_synchro, 'WW') AS semaine,
substr('t.Date_Synchro', 0, 10) AS date_synchro,
t.nb_appli_tmp AS nb_applis,
s.nb_job_tmp AS nb_jobs
FROM stat_applis t, STAT_JOBS s
WHERE substr(t.Date_Synchro ,0 ,10) SIMILAR TO substr(s.Date_Synchro ,0 ,10)
AND s.ID_DOMAINE = t.ID_DOMAINE AND s.ID_DOMAINE = 1
AND to_char(s.date_synchro, 'DAY') LIKE '%LUNDI%'
ORDER BY annee DESC,semaine DESC erreur

Code :Sélectionner tout - Visualiser dans une fenêtre à partHINT:  No FUNCTION matches the given name AND argument types. You might need TO ADD explicit type casts.

l'erreur vient de substr a priori mais je ne vois pas pourquoi quand je regarde dans le manuel postgres, j'ai bien cette option présente avec la même synthaxe.

Requête 2 :

Code :Sélectionner tout - Visualiser dans une fenêtre à part1234567 SELECT e.environnement,a.application,(((LENGTH(a.liens_vers) - LENGTH(REPLACE(a.liens_vers, ',')))/ LENGTH(',')) + 1) AS nb_liens_applis,j.job,(((LENGTH(j.liens_vers) - LENGTH(REPLACE(j.liens_vers, ',')))/ LENGTH(',')) + 1) AS nb_liens_jobs
FROM t_environnement e,t_application a, t_job j
WHERE e.id_environnement_ora = a.id_environnement_ora
AND j.id_application_ora = a.id_application_ora
AND j.id_domaine = 1
AND j.machine NOT LIKE '%poub%'
ORDER BY e.environnement,a.application,j.job message d'erreur :

Code :Sélectionner tout - Visualiser dans une fenêtre à part1234 ERROR:  FUNCTION REPLACE(character varying, unknown) does NOT exist
LINE 1: ...nt,a.application,(((LENGTH(a.liens_vers) - LENGTH(REPLACE(a....
                                                             ^
HINT:  No FUNCTION matches the given name AND argument types. You might need TO ADD explicit type casts.

idem, la fonction replace existe aussi en postgres, je ne vois pas pourquoi cela ne colle pas.

Hors ligne

#2 15/03/2012 16:13:02

Marc Cousin
Membre

Re : Requête postgresql

No FUNCTION matches the given name AND argument types. You might need TO ADD explicit type casts.
substr, c'est sur une chaîne de caractères, pas sur une date (je présume que date_synchro, c'est une date, ou un timestamp, ou autre de ce genre).

D'ailleurs c'est une mauvaise idée de faire un similar sur les dates de cette façon (vous comparez l'expression texte des dates au lieu de comparer les dates elles-mêmes). Que voulez-vous vraiment comparer ?

Mais bon, pour répondre à la question, si vous voulez vraiment faire un substr sur vos dates, il faut d'abord les convertir en texte, avec un to_char par exemple.

Pour replace, effectivement, elle existe, mais avec cette syntaxe : replace(string text, from text, to text)


Marc.

Hors ligne

Pied de page des forums