Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 24/01/2012, 14h41   #1
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
Par défaut Sysdate à heure précise + jour précis

Bonjour,

j'ai un programme qui sera lancé toutes les semaines le lundi matin. Il devra récupérer toutes les infos du programme du lundi 00h00 de la semaine d'avant jusqu'au dimanche soir 23h59 la veille.

Est-ce que c'est possible de "fixer" une valeur avec sysdate ?
Pour l'instant j'ai des bouts de scripts de ce genre :
Code :
1
2
3
4
 
 
WHERE to_date(<champDate>, 'YYYY\MM\DD HH24.MI.SS') BETWEEN TO_CHAR(SYSDATE - interval '7 10:00:00' DAY TO SECOND, 'MM-DD-YYYY HH24:MI:SS')  
          AND TO_CHAR(SYSDATE - interval '0 10:00:00' DAY TO SECOND, 'MM-DD-YYYY HH24:MI:SS')
pour enlever un certain nombre d'heures minutes à une date et

Code :
1
2
 
WHERE to_date(<champDate>, 'YYYYMMDD HH24MISS') BETWEEN add_months(sysdate - 8, -12) AND sysdate - 8;
Pour enlever et ajouter des jours et des mois.

En gros, ça devrait ressembler à un truc comme ça :

Code :
1
2
3
4
 
SELECT <champ1>, <champ2> 
FROM dcf
WHERE to_date(dcf.<champDate>, 'YYYY\MM\DD HH24.MI.SS') BETWEEN sysdate - 7 '00:00:00'  AND sysdate - 1 '23:59:59'
Si quelqu'un a déjà fait ça ou connait la façon de le faire, merci !
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h13   #2
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 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous avez la fonction TRUNC qui permet "d'arrondir" la date à une précision donnée.
Pour la semaine qui commence le lundi, le format IW est tout indiqué :
Code :
1
2
WHERE to_date(<champDate>, 'YYYYMMDD HH24MISS') >= trunc(sysdate, 'iw') - 7
  AND to_date(<champDate>, 'YYYYMMDD HH24MISS') <  trunc(sysdate, 'iw')
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 15h23   #3
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
Merci beaucoup ça a l'air de fonctionner !
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 10h18   #4
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
Je bump le sujet car j'ai une nouvelle question sur le même sujet :

Comment faire pour fixer la date à Dimanche de la semaine dernière ?

Mon programme est censé être effectué les lundi pour récupérer les infos de la semaine dernière. Donc jusqu'à sysdate - 1 (lundi -1 = dimanche).

Maintenant, si jamais pour une raison ou une autre, le programme plante le lundi ou la personne qui doit l'éxecuter est malade/en congé/ ... et le lance donc le lendemain.
sysdate - 1 prendra donc la valeur lundi et la, c'est la fin des haricots ! Il manquera un jour dans les infos que je dois récupérer.
Donc je me suis dit, plutôt que de mettre sysdate - 1, utiliser ce sysdate pour le fixer sur le dimanche de la semaine passée.

C'est possible de faire ça ?
Merci !
feldi est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/01/2012, 10h34   #5
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 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec la comparaison que je vous ai donnée, la plage sera toujours du lundi de la semaine passée au dimanche soir précédent.
Que le programme tourne le lundi ou le dimanche, ce sera la même plage, il suffit de regarder :
Code :
1
2
3
4
5
6
7
8
SELECT trunc(sysdate, 'iw') - 7 AS dt_deb
     , trunc(sysdate, 'iw')     AS dt_fin
     , trunc(sysdate, 'dd')     AS dt_actuelle
  FROM dual;
 
DT_DEB     DT_FIN     DT_ACTUELLE
---------- ---------- -----------
2012-01-16 2012-01-23 2012-01-25
Si c'est une nouvelle question, la réponse reste la même, la fonction TRUNC avec le format IW vous donnera toujours le lundi de la semaine en cours.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/01/2012, 11h07   #6
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
D'accord, merci bien.
feldi 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 23h45.


 
 
 
 
Partenaires

Hébergement Web