Bonjour a tous,
Via une requête sql j'ai besoin de reconstituer une date avec les éléments à ma disposition
Année
Mois
Semaine
Pourriez vous m'aider svp ?
Merci d'avance
Bonjour a tous,
Via une requête sql j'ai besoin de reconstituer une date avec les éléments à ma disposition
Année
Mois
Semaine
Pourriez vous m'aider svp ?
Merci d'avance
En fouillant un peu sur le net ce matin avec ces mots clef => "db2 find date with week",
bon je n'ai pas DB2 sous le coude pour tester...
Restera à inclure le mois ...
=>I need to find the last date of week when i pass year and week number as input in my stored procedure
...
Mais ça fait une réponse
Code : Sélectionner tout - Visualiser dans une fenêtre à part NEXT_DAY(DATE(CAST((<year>*1000 + (<week>-1)*7+1) AS CHAR(7)) -1, 'FRI')
Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
A part ça ... Il ne pleut jamais en Moselle !
Bonjour,
En reprenant la proposition de VttMan mise à l'épreuve des faits sur DB2 for Z/OS, voici une petite correction, pour tenir compte des problématiques spécifiques des semaines 1 et 53
Attention toutefois, comme vous n'avez pas précisé de quel DB2 il s'agit, il peut éventuellement y avoir des adaptations à faire
Une première CTE pour créer un jeu d'essai avec des années bissextiles et non bissextiles, et ayant ou non une semaine 53
Une deuxième CTE qui calcule un quantième quelconque dans la semaine, le +4 permet de rester dans la bonne semaine pour le cas particulier de la semaine 1 qui comprend 4 à 10 jours selon les années.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 WITH CTE1 (ANNEE, SEMAINE) AS ( SELECT '2015', '01' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2015', '04' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2015', '52' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2015', '53' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2016', '01' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2016', '52' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2016', '53' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2017', '01' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2017', '12' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2017', '52' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT '2017', '53' FROM SYSIBM.SYSDUMMY1 )
Et une troisième, si besoin, pour trouver le lundi qui précède la date calculée, attention, dans le cas de la semaine 1, on peut revenir au dernier lundi de l'année qui précède, à adapter le cas échéant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 , CTE2 (AAAA, WW, AAAAQQQ, MADATE) AS ( SELECT ANNEE , SEMAINE , ANNEE !!DIGITS(CAST((SEMAINE-1)*7 +4 AS DECIMAL(3,0))) , CASE WHEN SEMAINE < '53' THEN TO_DATE(ANNEE!!DIGITS(CAST((SEMAINE-1)*7 +4 AS DECIMAL(3,0))),'YYYYDDD',6) ELSE TO_DATE(ANNEE!!'365','YYYYDDD',6) END FROM CTE1)
Ce qui donne pour le jeu d'essai de la requête 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT AAAA , WW , MADATE , CASE WHEN DAYOFWEEK_ISO(MADATE) > 1 THEN DATE(MADATE)- (DAYOFWEEK_ISO(MADATE)-1) DAYS ELSE DATE(MADATE) END FROM CTE2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 2015 01 2015-01-04-00.00.00.000000 2014-12-29 2015 04 2015-01-25-00.00.00.000000 2015-01-19 2015 52 2015-12-27-00.00.00.000000 2015-12-21 2015 53 2015-12-31-00.00.00.000000 2015-12-28 2016 01 2016-01-04-00.00.00.000000 2016-01-04 2016 52 2016-12-26-00.00.00.000000 2016-12-26 2016 53 2016-12-30-00.00.00.000000 2016-12-26 2017 01 2017-01-04-00.00.00.000000 2017-01-02 2017 12 2017-03-22-00.00.00.000000 2017-03-20 2017 52 2017-12-27-00.00.00.000000 2017-12-25 2017 53 2017-12-31-00.00.00.000000 2017-12-25
Merci pour vos réponses
N'ayant malheureusement pas un super niveau de SQL pouvez vous m'aider à rapporter cette requête avec mes éléments
Table = Ma table
Société = société
Article = article
Quantité = Qté
Champ mois = CNAN
Champs semaine = CNSE
Je souhaite sélectionner les éléments suivants
En ajoutant un critère de bornage de date par exemple les 10 dernieres semaine par rapport à la semaine -1 ou alors les 70 derniers jours (d'ou ma question initiale)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Select société, article, Qte, CNAN, CNSE from ma table Where société = 1
Merci d'avance vous seriez des chefs
Bonjour,
Pour filtrer sur les 70 derniers jours il suffit d'ajouter ceci dans la dernière requête que je vous ai communiquée
WHERE DAYS(CURRENT_TIMESTAMP) - DAYS(MADATE) < 71
Pour ce qui concerne l'adaptation avec vos noms de colonnes, vous devriez y arriver tout seul, rien d'insurmontable
Si vous avez besoin de cours SQL, vous avez tout le nécessaire ici :
https://www.developpez.net/forums/d6...q-langage-sql/
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager