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 02/01/2012, 13h36   #1
Membre confirmé
 
Avatar de arthuro45
 
Arthur Salomon
Développeur du dimanche
Inscription : juillet 2009
Messages : 592
Détails du profil
Informations personnelles :
Nom : Arthur Salomon
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur du dimanche

Informations forums :
Inscription : juillet 2009
Messages : 592
Points : 213
Points : 213
Par défaut Between sans les samedi et dimanche

Bonjour et bonne année à toutes et tous

Cette requête doit ramener des dates de livraisons entre deux dates.
Comment écrire la condition du between pour exclure les samedi et les dimanche entre ces deux dates ?

Code :
1
2
3
4
5
SELECT CCD_DATE_LIVRAISON
FROM T_CCD_COMPLEMENT_COMMANDE
WHERE T_CCD_COMPLEMENT_COMMANDE.CCD_DATE_LIVRAISON BETWEEN 
                                     TO_CHAR(SYSDATE,'dd/mm/yyyy')
                                     AND TO_CHAR(SYSDATE+10,'dd/mm/yyyy')
Merci pour votre aide.
arthuro45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h13   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Regarde Nombre de jours ouvrés entre 2 dates pour un début de script de création d'une table calendrier.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h09   #3
Membre confirmé
 
Avatar de arthuro45
 
Arthur Salomon
Développeur du dimanche
Inscription : juillet 2009
Messages : 592
Détails du profil
Informations personnelles :
Nom : Arthur Salomon
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur du dimanche

Informations forums :
Inscription : juillet 2009
Messages : 592
Points : 213
Points : 213
Est-on vraiment obligé de passer par un calendrier ? Ne peut-on pas dire : si samedi ou dimanche je ne fais rien ?
arthuro45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h18   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
Citation:
Envoyé par arthuro45 Voir le message
Ne peut-on pas dire : si samedi ou dimanche je ne fais rien ?
Si si, bien sûr !
Il suffit d'ajouter une condition dans votre requête.

Code :
... AND to_char(la_date, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE');
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h28   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Par contre le BETWEEN avec un to_char, c'est pas top...
Utilise trunc pour supprimer la partie horraire, la requête donne donc :
Code :
1
2
3
4
SELECT CCD_DATE_LIVRAISON
  FROM T_CCD_COMPLEMENT_COMMANDE
 WHERE CCD_DATE_LIVRAISON BETWEEN trunc(SYSDATE,'dd/mm/yyyy') AND trunc(SYSDATE+10,'dd/mm/yyyy')
   AND to_char(CCD_DATE_LIVRAISON, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h36   #6
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
Quel format sur le trunc ! Un reste superflu des fêtes de fin d'année j'imagine !
Code :
1
2
3
4
5
6
7
8
9
SELECT trunc(sysdate,'dd/mm/yyyy') AS dt FROM dual;
 
-- ORA-01898: trop de précisions
 
SELECT trunc(sysdate,'dd') AS dt FROM dual;
 
DT        
----------
03/01/2012
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h53   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par Waldar Voir le message
Quel format sur le trunc ! Un reste superflu des fêtes de fin d'année j'imagine !
Non, un reste superflu du copier/coller avec le to_char
Merci d'avoir corrigé.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h16   #8
Membre confirmé
 
Avatar de arthuro45
 
Arthur Salomon
Développeur du dimanche
Inscription : juillet 2009
Messages : 592
Détails du profil
Informations personnelles :
Nom : Arthur Salomon
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur du dimanche

Informations forums :
Inscription : juillet 2009
Messages : 592
Points : 213
Points : 213
Merci à tous pour vos réponses mais la requête ainsi écrite n'exclue pas les samedi et dimanche après test, que je commente ou pas la condition :

Code :
1
2
3
4
SELECT DISTINCT CCD_DATE_LIVRAISON
  FROM T_CCD_COMPLEMENT_COMMANDE
 WHERE CCD_DATE_LIVRAISON = trunc(SYSDATE-8,'dd')
     AND to_char(CCD_DATE_LIVRAISON, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE')
Pour info :
Je ne peux pas générer une table calendrier, je n'ai pas les droits en écriture sur la base, je n'ai droit qu'en lecture.
arthuro45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h35   #9
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
Alors je suggérerais, pour tester, d'ajouter cette expression dans la clause SELECT, pour voir ce qui ressort comme jours (le tiret initial et final permet de voir s'il n'y a pas d'espace avant ou après la valeur) :
Code :
'-' || to_char(CCD_DATE_LIVRAISON, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') || '-'
En bonne logique, vous ne devriez pas avoir de SAMEDI ou DIMANCHE.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h55   #10
Membre confirmé
 
Avatar de arthuro45
 
Arthur Salomon
Développeur du dimanche
Inscription : juillet 2009
Messages : 592
Détails du profil
Informations personnelles :
Nom : Arthur Salomon
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur du dimanche

Informations forums :
Inscription : juillet 2009
Messages : 592
Points : 213
Points : 213
Citation:
Envoyé par Pomalaix Voir le message
Alors je suggérerais, pour tester, d'ajouter cette expression dans la clause SELECT, pour voir ce qui ressort comme jours (le tiret initial et final permet de voir s'il n'y a pas d'espace avant ou après la valeur) :
Code :
'-' || to_char(CCD_DATE_LIVRAISON, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') || '-'
En bonne logique, vous ne devriez pas avoir de SAMEDI ou DIMANCHE.
Effectivement je n'ai aucun samedi ou dimanche, mais je viens de voir une erreur qui m'incombe, j'ai mis la condition :
Code :
AND to_char(CCD_DATE_LIVRAISON, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE')
sur CCD_DATE_LIVRAISON au lieu de SYSDATE :
Code :
AND to_char(SYSDATE, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE')
J'aimerais ramener CCD_DATE_LIVRAISON si SYSDATE différent de samedi ou dimanche.
Mais maintenant je ne ramène plus rien :
Code :
AND to_char(SYSDATE, 'FMDAY', 'NLS_DATE_LANGUAGE=FRENCH') NOT IN ('SAMEDI', 'DIMANCHE')
arthuro45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h13   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
J'essaie de me greffer sur ce post mais je ne comprends plus rien !
Pour éclaircir, je pense qu'il faut revenir au fonctionnel !

Qu'est ce que tu veux faire si la date de livraison est un dimanche ou un samedi,
  • ne pas livrer
ou
  • Livrer le lundi suivant ?
Et que vient faire sysdate dans tout ça ?

En bref, quelle est la règle de gestion PRECISE que tu essaies de transcrire ?
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h19   #12
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
Citation:
Envoyé par arthuro45 Voir le message
J'aimerais ramener CCD_DATE_LIVRAISON si SYSDATE différent de samedi ou dimanche.
Vous êtes sûr de vouloir ça ??? SYSDATE représente la date actuelle (au moment de l'exécution de la requête), ça n'a rien à voir avec une valeur stockée en base.

Edit : tout à fait d'accord avec Garuda
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 14h23   #13
Membre confirmé
 
Inscription : février 2012
Messages : 203
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 203
Points : 267
Points : 267
Si ça peut t'aider, car pareil je ne comprend plus trop la demande et je pense que je répond à côté !

Le format D renvoi le rang du jour de dans la semaine :
1 pour Lundi
..
7 Pour Dimanche

Code :
1
2
3
 
-- Exclure les samedi et dimanche
AND TO_CHAR(#Champs_Date#,'D') < 6
PS : 1 peut égaler au Lundi comme au Dimanche selon la valeur du NLS_TERRITORY, donc pas forcément la bonne méthode...
Scriuiw est déconnecté   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 03h37.


 
 
 
 
Partenaires

Hébergement Web