vendredi 13 juillet 2012

Du casse tête des dates dans les SGDB

Toutes les personnes qui ont été amenées à faire des requêtes SQL sur les différents SGBD du marché se sont forcément heurtées au problème de la gestion des dates, de leurs formatages et de leurs opérations (décalage dans le temps).
Voici quelques exemples de solutions trouvées.

Nous disposons du progiciel Chimio, édité par Computer Engineering, et du progiciel Aria (anciennement Varis), édité par VARIAN. Dans le cadre de la mise en place de notre dossier médical, nous souhaitons ramener dans la base de données centrale les métadonnées de ces applications sources en provenance du site de Paris (Chimio sous Oracle) et du site de Saint-Cloud (Chimio sous SQLServer).
Les flux d'alimentation s'appuient sur PowerCenter, l'ETL d'Informatica. Les données à récupérer étant assez simples, les flux (appelés "Mapping" en PowerCenter) entre les deux versions de Chimio sont strictement identiques, même si les deux versions, elles, ne le sont pas.
Pour éviter de manipuler trop de données, nous souhaitons ramener uniquement les données datant de mois de n mois (paramètre $$MONTHS_AGO du flux d'alimentation).
Il faut savoir que le logiciel Chimio n'utilise pas de champs de type date, mais de champs textuels qui ont la forme YYYYMMDD.
Pour appliquer les même critères de sélection entre les deux version, j'ai dû modifier les filtres des sessions de chaque mapping de la façon suivante :

En Oracle :
INCLUSIO.DATEINCLUS > To_Char(Add_Months(SYSDATE, -1 * $$MONTHS_AGO), 'yyyymmdd')

En SQLServer :
INCLUSIO.DATEINCLUS > Convert(Char(8),DateAdd(month, -1 * $$MONTHS_AGO, GetDate()),112)

La mise en place filtre d'un comparable depuis Aria nous amener à utiliser la syntaxe suivante :

En Sybase :
ScheduledActivity.ScheduledStartTime > dateadd(month, -1 * $$MONTHS_AGO, current_date())

Aucun commentaire:

Enregistrer un commentaire