Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 10/10/2011, 16h13   #1
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 175
Points : 18
Points : 18
Par défaut Trouver les jours de la semaine à partir du numéro de semaine

Bonjour à tous,

qui pourrait m'aider à mettre sur pied une requête permettant de trouver les 7 jours d'une semaine à partir du numéro de la semaine et de l'année?

Par exemple:
07/2011 pour la semaine numéro 07 (donc du mois de février) de l´année 2011, ce qui me donnerait :

14.02.2011
15.02.2011
16.02.2011
17.02.2011
18.02.2011
19.02.2011
20.02.2011

Merci de m´aider....
makohsarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h26   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
http://download.oracle.com/docs/cd/B...004.htm#i34924

Code :
SELECT to_char(sysdate,'WW') semainecourante FROM dual;
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h52   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
bonjour,


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
WITH t_date
AS
(
SELECT SYSDATE + level AS d_annee
FROM dual
connect BY LEVEL <= 365
)
SELECT trunc(d_annee)            AS "Date"   
  ,    trunc(d_annee,'IW')-1     AS "Premier jour de la semaine"
  ,    trunc(d_annee,'IW')+5     AS "Dernier jour de la semaine"
  ,    to_char(d_annee,'IW') AS "Numéro de la semaine"
FROM t_date
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 18h06   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Y'a un souci, pourquoi faire -1 pour le premier jour ?
Ca donne du 09/10 (dimanche) au 15/10 (samedi).. alors que le 16/10 est à la semaine 41..
Code :
1
2
3
4
5
6
7
8
Date	Premier jour de la semaine	Dernier jour de la semaine	Numéro de la semaine
10/10/2011	09/10/2011	15/10/2011	41
11/10/2011	09/10/2011	15/10/2011	41
12/10/2011	09/10/2011	15/10/2011	41
13/10/2011	09/10/2011	15/10/2011	41
14/10/2011	09/10/2011	15/10/2011	41
15/10/2011	09/10/2011	15/10/2011	41
16/10/2011	09/10/2011	15/10/2011	41
C'est plutôt
Code :
1
2
3
4
5
6
7
8
9
10
WITH t_date AS
(SELECT TRUNC(SYSDATE, 'RR')-1 + LEVEL AS d_annee
FROM dual
connect BY LEVEL <= 365)
SELECT TRUNC(d_annee)            AS "Date"   
  ,    TRUNC(d_annee,'IW')     AS "Premier jour de la semaine"
  ,    TRUNC(d_annee,'IW')+6     AS "Dernier jour de la semaine"
  ,    TO_CHAR(d_annee,'IW') AS "Numéro de la semaine"
FROM t_date
WHERE TO_CHAR(d_annee,'IW') = '41'
Code :
1
2
3
4
5
6
7
8
Date	Premier jour de la semaine	Dernier jour de la semaine	Numéro de la semaine
10/10/2011	10/10/2011	16/10/2011	41
11/10/2011	10/10/2011	16/10/2011	41
12/10/2011	10/10/2011	16/10/2011	41
13/10/2011	10/10/2011	16/10/2011	41
14/10/2011	10/10/2011	16/10/2011	41
15/10/2011	10/10/2011	16/10/2011	41
16/10/2011	10/10/2011	16/10/2011	41
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 18h16   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Pour avoir simplement les jours de la semaine

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT  TRUNC(TRUNC(SYSDATE, 'RR'),'IW') + 41 * 7 + num  AS jour
FROM (SELECT ROWNUM -1 num FROM dual connect BY LEVEL <= 7)
 
JOUR
10/10/2011
11/10/2011
12/10/2011
13/10/2011
14/10/2011
15/10/2011
16/10/2011
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 19h19   #6
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 175
Points : 18
Points : 18
Merci pour vos propositions je vais tester demain je suis malheureusement deja hors du bureau et pas possible de tester....
je vous donne la suite demain

merci
makohsarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 19h29   #7
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 175
Points : 18
Points : 18
question:
McM : je n´ai pas bien compris votre requete , si je dois donner comme parametre l´année 2011 ou bien 2010 ou bien 2012 et le numero de la semaine, ou est ce que je mettrais l´année passée en parametre dans votre requete? c´est quoi "num" ? quelle valeur devrait -elle avoir?

a bientot
makohsarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 10h11   #8
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
voici une solution parmis les autres.
Code :
1
2
3
4
5
6
SELECT  (to_date(trunc(sysdate,'yyyy'))-to_char(to_date(trunc(sysdate,'yyyy')),'d')+1)+41*7+plus_un_jour semainecourante 
FROM 
 
 (SELECT  level-1  plus_un_jour
FROM dual
connect BY LEVEL <= 7)
la logique est comme suite:

Code :
debut d'année-numero jour+1+numero_semaine*7+incrementation
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h41   #9
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 175
Points : 18
Points : 18
Salut,
mon probleme dans toutes ces requetes c´est la possibilité de parametrer
l´année, ici on a le SYSDATE, quand j´essaie de le remplacer par une autre date du genre 01.01.2009 00:00:00 (pour avoir par exemple la semaine 25 de l´annee 2009), j´ai un message d´erreur , Mon probleme ici c´est de pouvoir determiner la semaine de n´importe quelle année à partir de son numero.

Merci
makohsarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h55   #10
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Dans ma requête que j'ai posté; on replace sysdate par n'importe quelle date. Cette dernière est utilisée afin de récupérer le premier jour de l'année donnée.
pour cela, si tu as la date sous forme 01.01.2009 00:00:00, j'ai adapté ma requête pour qu'elle réponde à ton besoin.

Code :
1
2
3
4
5
6
7
8
SELECT  (trunc(to_date('01.10.2009 00:00:00','dd/mm/yyyy HH24:MI:SS'),'yyyy')-
to_char(trunc(to_date('01.10.2009 00:00:00','dd/mm/yyyy HH24:MI:SS'),'yyyy'),'d')+1)
+25*7+plus_un_jour semainecourante 
FROM 
 
 (SELECT  level-1  plus_un_jour
FROM dual
connect BY LEVEL <= 7)
resultat:

Code :
1
2
3
4
5
6
7
8
   	SEMAINECOURANTE
1	22/06/2009
2	23/06/2009
3	24/06/2009
4	25/06/2009
5	26/06/2009
6	27/06/2009
7	28/06/2009
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 12h12   #11
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Comment saisissez-vous vos paramètres ?
Si ce sont des variables, par exemple :
Code :
1
2
3
SELECT TRUNC(to_date(:annee, 'YYYY'), 'IYYY')
       + (:semaine - 1 ) * 7 + num AS jour
  FROM (SELECT level - 1 AS num FROM dual connect BY LEVEL <= 7);
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 12h18   #12
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Autre solution, alimenter une table avec :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH t_annee
AS
(
  SELECT  ADD_MONTHS(to_date('01/01/1900','DD/MM/YYYY'),(LEVEL-1)*12) AS annee
  FROM dual 
  connect BY LEVEL <= 1000
),t_date AS
(
  SELECT t_annee.annee-1 + LEVEL AS d_annee
  FROM t_annee
  connect BY LEVEL <= 366
)
SELECT TO_CHAR(d_annee,'YYYY')   AS Annee
  ,    TO_CHAR(d_annee,'MM')     AS Mois
  ,    TRUNC(d_annee)            AS "Date"   
  ,    TRUNC(d_annee,'IW')       AS "Premier jour de la semaine"
  ,    TRUNC(d_annee,'IW')+6     AS "Dernier jour de la semaine"
  ,    TO_CHAR(d_annee,'IW')     AS "Numéro de la semaine"
FROM t_date
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 12h24   #13
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Waldar, avec tout mon respect.
je trouve que tu as loopé une semaine.
par exemple;
si annee=2009 et semaine=20
on aura:
Code :
1
2
3
4
5
6
7
8
   	JOUR
1	11/05/2009
2	12/05/2009
3	13/05/2009
4	14/05/2009
5	15/05/2009
6	16/05/2009
7	17/05/2009
par contre la requete suivante:

Code :
  SELECT to_char(to_date('11/05/2009'),'ww') num_semaine FROM dual
nous donne:
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h26   #14
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 175
Points : 18
Points : 18
merci pour toutes vos propositions, ca marche maintenant.
@Boussafi, : Mais ce qui est bizzare avec ta requete pour l´année 2009 ou 2007 , la septieme semaine 07 ca me donne un resultat majoré 1 semaine plus tard ....
@waldar ca marche correctement

Sinon les autres resultats sont Ok
Merci les cerveaux
makohsarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h55   #15
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par boussafi Voir le message
Waldar, avec tout mon respect.
je trouve que tu as loopé une semaine.
Et avec le même respect et le bon paramétrage :
Code :
1
2
3
4
5
6
SELECT to_char(to_date('11/05/2009', 'dd/mm/yyyy'),'iw') AS num_semaine
  FROM dual;
 
NUM_SEMAINE
-----------
20
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h04   #16
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Effectivement Waldar, il y a une différence entre le paramètre WW et IW.
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h35.


 
 
 
 
Partenaires

Hébergement Web