Index des Archives

www.ancestrologie.com
Le nouvel ensemble de forums touchant à Ancestrologie et à ses plugins 


[résolu] Structure conditionnelle dans les requêtes SQL

 
Poster un nouveau sujet   Répondre au sujet    Index des Archives -> Ancestrologie - Le module SQL tres facilement
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
gmourral
Super-amateur
Super-amateur


Inscrit le: 30 Aoû 2004
Messages: 20

MessagePosté le: 06 Jan 2005 19:27    Sujet du message: [résolu] Structure conditionnelle dans les requêtes SQL Répondre en citant

Est-il possible d'utiliser la structure conditionelle CASE WHEN dans le requêteur SQL ?
J'ai essayé mais cela ne marche pas. Je me fais jeter sur le CASE. Pourtant c'est une instruction standard d'Interbase. Est-ce normal ?

Est-il possible d'écrire une structure conditionelle dans une requête ? Quel est la syntaxe ?

Merci
Guy-Arnaud


Dernière édition par gmourral le 10 Jan 2005 12:08; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Cazaux-Moutou Philippe
Ancestrologie
Ancestrologie


Inscrit le: 26 Fév 2003
Messages: 781
Localisation: Guadeloupe

MessagePosté le: 07 Jan 2005 02:10    Sujet du message: Répondre en citant

envoie moi ta requete, que je la teste
_________________
Cordialement depuis la Guadeloupe

35° dehors, autant dedans, la mer, je vous dit pas et 55° le ti'punch
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur
gmourral
Super-amateur
Super-amateur


Inscrit le: 30 Aoû 2004
Messages: 20

MessagePosté le: 07 Jan 2005 10:08    Sujet du message: Répondre en citant

Je t'explique rapidement le besoin qu'il y a derrière cette requête :
Je me suis aperçu par hasard qu'il y avait, pour certains individus, une incohérence entre le champ DATE_NAISSANCE de la Table INDIVIDU et le champ EV_IND_DATE de la table EVENEMENTS_IND.
Une recherche dans le Forum m'a montré que le bug avait déjà été découvert et corrigé fin août 2004.
Pour corriger les données erronées il suffit de supprimer l'événement naissance et le recréer.
Pour identifier les individus à corriger il faut que je compare les champs DATE_NAISSANCE et EV_IND_DATE, mais comme ils sont dans des formats différents, j'ai entrepris de convertir le champ DATE_NAISSANCE au format Date. Pour l'année et le jour, pas de problème, par contre pour le mois il faut que j'utilise une structure conditionelle pour déterminer le numéro du moi, d'où Case When ...

Peut être qu'il y a un moyen plus simple de faire cela, je suis preneur de toute suggestion (j'ai essayé l'export sous Excel mais Excel ne sait pas afficher les dates antérieures à 1904).

Voici la requête que j'ai essayé de faire tourner.


SELECT
INDIVIDU.NOM,
INDIVIDU.PRENOM,
INDIVIDU.DATE_NAISSANCE,
EVENEMENTS_IND.EV_IND_DATE,
INDIVIDU.ANNEE_NAISSANCE,
case
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Janvier' THEN '01'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Février' THEN '02'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mars' THEN '03'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Avril' THEN '04'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mai' THEN '05'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juin' THEN '06'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juillet' THEN '07'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Août' THEN '08'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Septembre' THEN '09'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Octobre' THEN '10'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Novembre' THEN '11'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Décembre' THEN '12'
AS FIELD_1,
cast((INDIVIDU.ANNEE_NAISSANCE||'-07-' ||SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 2)) as date) AS FIELD_1
FROM
INDIVIDU
INNER JOIN EVENEMENTS_IND ON (INDIVIDU.CLE_FICHE = EVENEMENTS_IND.EV_IND_KLE_FICHE)
WHERE
(EVENEMENTS_IND.EV_IND_TYPE = 'BIRT') AND
(INDIVIDU.KLE_DOSSIER = '1') AND
(EVENEMENTS_IND.EV_IND_DATE IS NOT NULL)
ORDER BY
INDIVIDU.NOM,
INDIVIDU.PRENOM
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
pthierry
Pro
Pro


Inscrit le: 27 Fév 2003
Messages: 455
Localisation: Paris 13

MessagePosté le: 07 Jan 2005 13:39    Sujet du message: Répondre en citant

when... then ne fait pas partie du langage SQL de manipulation de données pour Interbase/Firebird
containing est inconnu sous Interbase/Firebird

si tu veux la liste des données incohérentes
voilà tout simplement une requete :

SELECT DISTINCT INDIVIDU.CLE_FICHE AS NIP,
INDIVIDU.NOM,
INDIVIDU.PRENOM,
INDIVIDU.DATE_NAISSANCE,
EVENEMENTS_IND.EV_IND_DATE_WRITEN,
EVENEMENTS_IND.EV_IND_DATE
FROM EVENEMENTS_IND
INNER JOIN INDIVIDU ON (EVENEMENTS_IND.EV_IND_KLE_FICHE = INDIVIDU.CLE_FICHE) AND (EVENEMENTS_IND.EV_IND_KLE_DOSSIER = INDIVIDU.KLE_DOSSIER)
WHERE
(
(EVENEMENTS_IND.EV_IND_TYPE = 'BIRT')
and
(INDIVIDU.DATE_NAISSANCE <> EVENEMENTS_IND.EV_IND_DATE_WRITEN)
)
ORDER BY INDIVIDU.CLE_FICHE

si tu mets à jour les événements BIRT et DEAT , il y a une mise à jour automatique des dates dans la table individu (triger after update qui déclenche la proc proc_maj_date_un_ind )
_________________
N'oubliez pas la fonction Rechercher...
Cordialement Pierre
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
gmourral
Super-amateur
Super-amateur


Inscrit le: 30 Aoû 2004
Messages: 20

MessagePosté le: 07 Jan 2005 15:55    Sujet du message: Répondre en citant

Cela ne peut pas fonctionner car c'est le champ EV_IND_DATE qui est erronné. Le champ EV_IND_DATE_WRITEN est lui cohérent et donc toujours égal au champ DATE_Naissance.

J'avais trouvé l'info sur http://sqlpro.developpez.com/cours/sqlaz/fonctions/
En cherchant j'ai trouvé l'info suivante : Le CASE n'est implémenté que sur Firebird 1.5 et Interbase 7.5.
Je ne connais pas la version utilisée par ancestrologie, mais ce doit être une version antérieure.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
pthierry
Pro
Pro


Inscrit le: 27 Fév 2003
Messages: 455
Localisation: Paris 13

MessagePosté le: 07 Jan 2005 16:52    Sujet du message: Répondre en citant

gmourral a écrit:
J'avais trouvé l'info sur http://sqlpro.developpez.com/cours/sqlaz/fonctions/
En cherchant j'ai trouvé l'info suivante : Le CASE n'est implémenté que sur Firebird 1.5 et Interbase 7.5.
Je ne connais pas la version utilisée par ancestrologie, mais ce doit être une version antérieure.

je n'ai parlé de Case parce que la version de Firebird d'Ancestro est la 1.5

attention la colonne EV_IND_DATE est au format Date mm/dd/yyyy

mais si tu enlèves la ligne
and
(INDIVIDU.DATE_NAISSANCE <> EVENEMENTS_IND.EV_IND_DATE_WRITEN)
de la requete tu auras la liste de toutes les naissances

je l'ai fait avec le BOA parce que ma version d'Ancestrologie (version bureau) n'a pas le requeteur , puis export en texte (les dates de la colonne EV_IND_DATE sont au format dd/mm/yyyy) et import sous excel Laughing
_________________
N'oubliez pas la fonction Rechercher...
Cordialement Pierre
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Invité






MessagePosté le: 07 Jan 2005 19:22    Sujet du message: Répondre en citant

La source de mes infos sur le Case When ... provient de l'adresse suivante http://www.developpez.net/forums/viewtopic.php?t=273692.
Où l'on a syntaxe du CASE WHEN ... et l'info de sa validité en 7.5.

Mon problème est que j'ai beaucoup j'ai beaucoup d'individus et que c'est très pénible de parcourir un fichier de 1000 lignes à la recherche de champs incohérents et comme je suis un grand fainéant je me suis tourné vers une solution SQL, qui en plus me permet d'être exhaustif.

Guy-Arnaud
Revenir en haut
Lau
Pro, Modérateur
Pro, Modérateur


Inscrit le: 01 Avr 2003
Messages: 1541

MessagePosté le: 07 Jan 2005 22:49    Sujet du message: Répondre en citant

Il me semble de mémoire qu'un "case when", s'il marche sous MS SQL Server, doit avoir un "end" à la fin. Essaie comme cela...
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Lau
Pro, Modérateur
Pro, Modérateur


Inscrit le: 01 Avr 2003
Messages: 1541

MessagePosté le: 07 Jan 2005 22:52    Sujet du message: Répondre en citant

En rajoutant end après les when, ta requête va un peu plus loin, mais elle plante sur le format des dates. Je n'ai pas le temps de tester plus. Voilà la requête avec le "end" en plus :
Citation:
SELECT
INDIVIDU.NOM,
INDIVIDU.PRENOM,
INDIVIDU.DATE_NAISSANCE,
EVENEMENTS_IND.EV_IND_DATE,
INDIVIDU.ANNEE_NAISSANCE,
case
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Janvier'
THEN '01'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Février' THEN
'02'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mars' THEN
'03'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Avril' THEN
'04'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mai' THEN
'05'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juin' THEN
'06'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juillet' THEN
'07'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Août' THEN
'08'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Septembre'
THEN '09'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Octobre'
THEN '10'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Novembre'
THEN '11'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Décembre'
THEN '12' end
AS FIELD_1,
cast((INDIVIDU.ANNEE_NAISSANCE||'-07-' ||SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 2)) as date) AS FIELD_1
FROM
INDIVIDU
INNER JOIN EVENEMENTS_IND ON (INDIVIDU.CLE_FICHE = EVENEMENTS_IND.EV_IND_KLE_FICHE)
WHERE
(EVENEMENTS_IND.EV_IND_TYPE = 'BIRT') AND
(INDIVIDU.KLE_DOSSIER = '1') AND
(EVENEMENTS_IND.EV_IND_DATE IS NOT NULL)
ORDER BY
INDIVIDU.NOM,
INDIVIDU.PRENOM
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
pthierry
Pro
Pro


Inscrit le: 27 Fév 2003
Messages: 455
Localisation: Paris 13

MessagePosté le: 08 Jan 2005 14:47    Sujet du message: Répondre en citant

désolé mais je travaillais avec EMS et Interbase 6 pour mes requetes et effectivement le when then et containing ne sont pas implémentés , c'est une nouveauté Firebird 1.5 ,
ça ne fonctionne pas non plus avec le requeteur d'Ancestro (problème avec le composant ?) , il faut passer par le BOA.
_________________
N'oubliez pas la fonction Rechercher...
Cordialement Pierre
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
gmourral
Super-amateur
Super-amateur


Inscrit le: 30 Aoû 2004
Messages: 20

MessagePosté le: 08 Jan 2005 18:42    Sujet du message: Répondre en citant

Effectivement ça marche beaucoup mieux en rajoutant le end à la fin de la fonction Case (C'était bien écrit dans la doc mais je ne l'ai pas lu ...)

Le message d'erreur est dû aux carcatères accentués. De temps en temps cela marche mais je comprends pas bien pourquoi. J'enquête.

Les instructions Case When ... fonctionne donc très bien sous BOA mais pas dans le requêteur SQL.

Merci beaucoup de votre aide.

Guy-Arnaud
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
pthierry
Pro
Pro


Inscrit le: 27 Fév 2003
Messages: 455
Localisation: Paris 13

MessagePosté le: 09 Jan 2005 21:32    Sujet du message: Répondre en citant

quand tu fais
SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) tu considères que la date est de la forme 11 septembre 1852
mais si elle est "vers 11 septembre 1852" ou "avant 11 septembre 1852"
le
cast((INDIVIDU.ANNEE_NAISSANCE||'07' ||SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 2)) as date) n'est pas bon
_________________
N'oubliez pas la fonction Rechercher...
Cordialement Pierre
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
gmourral
Super-amateur
Super-amateur


Inscrit le: 30 Aoû 2004
Messages: 20

MessagePosté le: 10 Jan 2005 11:46    Sujet du message: Répondre en citant

La conclusion :

L'instruction Case When Containing End... fonctionne bien dans BOA. Toutefois
- La clause Containing n'est pas capable de traiter des chaines de caractères contenant des caractères accentués --> exit les mois de décembre et février.
- lorsqu'on l'utilise dans une clause Where elle semble s'appliquer à l'ensemble des données sans prendre en compte les autres restrictions de la clause Where. Par exemple je ne voulais pas traiter les dates commençant par 'vers' (cf. remarque de Thierry), j'ai mis la restriction idoine, mais il traite quand même les dates contenant 'vers'.

la clause suivante
(SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 4) <> 'vers') and
cast((INDIVIDU.ANNEE_NAISSANCE||'-'||case
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Janvier' THEN '01'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Fevrier' THEN '02'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mars' THEN '03'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Avril' THEN '04'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mai' THEN '05'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juin' THEN '06'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juillet' THEN '07'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Aout' THEN '08'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Septembre' THEN '09'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Octobre' THEN '10'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Novembre' THEN '11'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Decembre' THEN '12'
end
||'-' ||SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 2)) as date) <>EVENEMENTS_IND.EV_IND_DATE

se plante en disant qu'il est impossible de convertir au format date '1771-05-ve' !!!

Finalement pour résoudre mon problème original j'ai procédé autrement.
J'ai écrit la requête suivante :

SELECT
INDIVIDU.NOM,
INDIVIDU.PRENOM,
INDIVIDU.DATE_NAISSANCE,
EVENEMENTS_IND.EV_IND_DATE,
INDIVIDU.ANNEE_NAISSANCE
FROM
INDIVIDU
INNER JOIN EVENEMENTS_IND ON (INDIVIDU.CLE_FICHE = EVENEMENTS_IND.EV_IND_KLE_FICHE)
WHERE
(EVENEMENTS_IND.EV_IND_TYPE = 'BIRT') AND
(INDIVIDU.KLE_DOSSIER = '1') AND
(EVENEMENTS_IND.EV_IND_DATE IS NOT NULL) and
cast(extract(year from EVENEMENTS_IND.EV_IND_DATE) as char(4)) <> INDIVIDU.ANNEE_NAISSANCE
ORDER BY
INDIVIDU.NOM,
INDIVIDU.PRENOM
qui m'a permis d'avoir la liste des individus pour l'année de naissance ne correspondait pas à l'année du champ EV_IND_DATE.
puis j'ai supprimé et recréé les événements naissance des individus de ma liste.
Puis j'ai fait la même chose pour les décès.[/list]
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
pthierry
Pro
Pro


Inscrit le: 27 Fév 2003
Messages: 455
Localisation: Paris 13

MessagePosté le: 10 Jan 2005 13:32    Sujet du message: Répondre en citant

gmourral a écrit:

- La clause Containing n'est pas capable de traiter des chaines de caractères contenant des caractères accentués --> exit les mois de décembre et février.
- lorsqu'on l'utilise dans une clause Where elle semble s'appliquer à l'ensemble des données sans prendre en compte les autres restrictions de la clause Where. Par exemple je ne voulais pas traiter les dates commençant par 'vers' (cf. remarque de Thierry), j'ai mis la restriction idoine, mais il traite quand même les dates contenant 'vers'.


containing traite bien les caractères accentués (la base est en ISO8859_1)
j'ai repris ta requete et ça marche avec le BOA
SELECT
INDIVIDU.NOM,
INDIVIDU.PRENOM,
INDIVIDU.DATE_NAISSANCE,
EVENEMENTS_IND.EV_IND_DATE,
INDIVIDU.ANNEE_NAISSANCE
FROM
INDIVIDU
INNER JOIN EVENEMENTS_IND ON (INDIVIDU.CLE_FICHE = EVENEMENTS_IND.EV_IND_KLE_FICHE)
WHERE
(EVENEMENTS_IND.EV_IND_TYPE = 'BIRT') AND
(INDIVIDU.KLE_DOSSIER = '1') AND
(SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 4) <> 'vers') and
cast((INDIVIDU.ANNEE_NAISSANCE||'-'||case
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Janvier' then '01'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Février' then '02'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mars' then '03'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Avril' then '04'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Mai' then '05'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juin' then '06'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Juillet' then '07'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Août' then '08'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Septembre' then '09'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Octobre' then '10'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Novembre' then '11'
WHEN SUBSTR(INDIVIDU.DATE_NAISSANCE, 3, STRLEN(INDIVIDU.DATE_NAISSANCE) -4) CONTAINING 'Décembre' then '12'
end
||'-' ||SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 2)) as date) <> EVENEMENTS_IND.EV_IND_DATE
ORDER BY
INDIVIDU.NOM,
INDIVIDU.PRENOM
par contre au lieu de tester une différence (<> vers , il y a trop de cas possibles) il vaudrait peut-être mieux tester que le premier caractère est un "chiffre"

(SUBSTR(INDIVIDU.DATE_NAISSANCE, 1, 4) <> 'vers') remplacerpar
(SUBSTR(INDIVIDU.DATE_NAISSANCE,1,1) in ('0','1','2','3','4','5','6','7','8','9'))
_________________
N'oubliez pas la fonction Rechercher...
Cordialement Pierre
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Index des Archives -> Ancestrologie - Le module SQL tres facilement Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous pouvez poster de nouveaux sujets dans ce forum
Vous pouvez répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com