Traitement sur les dates

Convertir une date Access en type date

Sous Access et historiquement Lotus 1-2-3 (Explication ici) la date est stockée sous forme d’un entier, Dans PostgreSQL nosu allons utiliser le type interval pour retrouver le type date.

 1--
 2-- Fonction qui converti un entier en date
 3-- Dans Lotus 1-2-3 et Access, le jour 0 est égal au 30/12/1899
 4-- Auteur: Christophe CHAUVET
 5-- License: Creative commons BY-SA
 6--   https://creativecommons.org/licenses/by-sa/4.0/
 7--
 8CREATE OR REPLACE FUNCTION access_to_date(
 9   a_num INTEGER)
10RETURNS date AS
11$BODY$
12
13BEGIN
14
15  RETURN ('1899-12-30'::date + (a_num||' day')::interval)::date;
16
17END;
18
19$BODY$
20LANGUAGE plpgsql;

Télécharger le fichier access_to_date.sql

Pour l’utiliser

SELECT access_to_date(42821)
-- on obtient 27/03/2017

Convertir un type date en date Access

La fonction inverse, qui permet de retrouver la valeur à stocker

 1--
 2-- Fonction qui converti une date en entier
 3-- Dans Lotus 1-2-3 et Access, le jour 0 est égal au 30/12/1899
 4-- Auteur: Christophe CHAUVET
 5-- License: Creative commons BY-SA
 6--   https://creativecommons.org/licenses/by-sa/4.0/
 7--
 8CREATE OR REPLACE FUNCTION date_to_access(
 9   a_date DATE)
10RETURNS integer AS
11$BODY$
12
13BEGIN
14
15  RETURN (a_date - '1899-12-30'::date)::integer;
16
17END;
18
19$BODY$
20LANGUAGE plpgsql;

Télécharger le fichier date_to_access.sql

SELECT date_to_access('2017-03-27'::date)
-- on obtient 42821