Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2007, 12h01   #1
Invité de passage
 
Inscription : août 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 9
Points : 1
Points : 1
Par défaut Remplir une table de dates

Bonjour,

Je désire remplir une table date (date) de toutes les dates de 2003 à aujourd'hui (du calendrier)..

Insert into Date (date)
SELECT...

Je sais que en sql sous oracle
pour généré 99 jours successifs :
INSERT INTO laTable (laDate)
SELECT TRUNC(DateDepart + ROWNUM)
FROM DUAL
CONNECT BY ROWNUM < 100

Cependant "CONNECT BY ROWNUM" ne marche pas sous pgsql.. ou alors faudrait faire du pl/pgsql mais je ne sais pas faire.
Donc si quelqu'un peut m'aider et me trouver une solution à mon problème, il sera le bienvenue.

Merci,
Cordialement,
Michto
Michtopelo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 14h22   #2
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par Michtopelo
Bonjour,

Je désire remplir une table date (date) de toutes les dates de 2003 à aujourd'hui (du calendrier)..

Insert into Date (date)
SELECT...

Je sais que en sql sous oracle
pour généré 99 jours successifs :
INSERT INTO laTable (laDate)
SELECT TRUNC(DateDepart + ROWNUM)
FROM DUAL
CONNECT BY ROWNUM < 100

Cependant "CONNECT BY ROWNUM" ne marche pas sous pgsql.. ou alors faudrait faire du pl/pgsql mais je ne sais pas faire.
Donc si quelqu'un peut m'aider et me trouver une solution à mon problème, il sera le bienvenue.

Merci,
Cordialement,
Michto

PostgreSQL supporte la syntaxe :

date 'DATE' + integer 'INT'

http://www.postgresql.org/docs/8.0/i...-datetime.html
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 15h21   #3
Invité de passage
 
Inscription : août 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 9
Points : 1
Points : 1
Ok, on est d'accord.. mais ça m'avance pas trop pour remplir complètement une table de dates d'un calendrider. Je te remercie quand même pour ton aide.

Cordialement,
Michto
Michtopelo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 17h10   #4
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par Michtopelo
Ok, on est d'accord.. mais ça m'avance pas trop pour remplir complètement une table de dates d'un calendrider. Je te remercie quand même pour ton aide.

Cordialement,
Michto
create or replace function dates(date,date) returns setof date as
$BODY$DECLARE
date_from alias for $1 ;
date_to alias for $2 ;
from_date date ;
BEGIN
from_date := date_from ;
WHILE (from_date <= date_to) LOOP
RETURN NEXT from_date ;
from_date := from_date + 1 ;
END LOOP ;

RETURN ;
END;
$BODY$ LANGUAGE 'plpgsql'

> select * from dates(date '2006-01-01',date '2006-01-10') ;
dates
------------
2006-01-01
2006-01-02
2006-01-03
2006-01-04
2006-01-05
2006-01-06
2006-01-07
2006-01-08
2006-01-09
2006-01-10
(10 rows)

> insert into mytable(mydate) select * from dates('2003-01-01', current_date) ;
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 18h52   #5
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
tu peux créer une fonction comme suit aussi:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION "public"."fonctiondate" () RETURNS SETOF bit AS
$body$
/*
 
*/
 
DECLARE
       a integer;
       b date;
BEGIN
 
 a=1;
 b= '2003/01/01';
 
 while a<100 loop
 INSERT INTO budgets."table1" (datet) VALUES (b+a);
 a=a+1;
 
END loop;
 
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
  Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 18h57   #6
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
après pour lancer la fonction tu tape:

Code :
1
2
 
SELECT * FROM fonctiondate()
  Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h10.


 
 
 
 
Partenaires

Hébergement Web