IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Extraire un jour d'un période


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 47
    Points : 37
    Points
    37
    Par défaut Extraire un jour d'un période
    Bonjour,

    j'espère être au bon endroit pour exprimer mon besoin.

    J'essaye de faire la chose suivant en SQL (Oracle 10).

    J'ai une période D1 -----> D2

    Je souhaite extraitre par exemple tous les lundis de cette période.

    Est-ce faisable en SQL ou dois-je passer par PL/SQL?

    Cordialement.

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 077
    Points
    8 077
    Par défaut
    Bonjour

    Quelque chose comme ça peut fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    alter session set nls_date_language=french;
    DEFINE DATEDEP='12/02/2010'
    DEFINE DATEFIN='27/03/2010'
     
    select DATEJOUR from
    (select to_date('&&DATEDEP', 'DD/MM/YYYY') - 1 + rownum as DATEJOUR
    from dual connect by rownum < to_date('&&DATEFIN', 'DD/MM/YYYY') - to_date('&&DATEDEP', 'DD/MM/YYYY') + 2)
    where to_char(DATEJOUR, 'FMday')='lundi';
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Pas mieux, excepté peut-être que je verrais mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(DATEJOUR, 'D')=1
    mais il y a peut-être une subtilité que je ne connais pas.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  4. #4
    Invité
    Invité(e)
    Par défaut
    attention à vos variables NLS...
    Certains pays (comme ceux d'Amérique du Nord) considère le premier jour de la semaine comme le dimanche...
    à tester !

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 077
    Points
    8 077
    Par défaut
    Citation Envoyé par nuke_y Voir le message
    Pas mieux, excepté peut-être que je verrais mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(DATEJOUR, 'D')=1
    mais il y a peut-être une subtilité que je ne connais pas.
    C'est pour rendre la chose plus internationale ? Dans ce cas c'est raté, car le lundi n'est pas le premier jour de la semaine partout.

    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
    DEFINE DATEDEP='12/02/2010'
    DEFINE DATEFIN='27/03/2010'
     
    set serveroutput on
    declare
       type tabdates is table of date index by pls_integer;
       dates tabdates;
    begin
       for i in (select value from v$nls_valid_values where parameter='TERRITORY' order by 1) loop
               execute immediate 'alter session set nls_territory=''' || i.value || '''';
               select DATEJOUR bulk collect into dates
               from (select to_date('&&DATEDEP', 'DD/MM/YYYY') - 1 + rownum as DATEJOUR
                       from dual connect by rownum < to_date('&&DATEFIN', 'DD/MM/YYYY') - to_date('&&DATEDEP', 'DD/MM/YYYY') + 2)
               where to_char(DATEJOUR, 'D')=1;
               dbms_output.put_line(to_char(dates(1), 'DD/MM/YYYY') || ' : ' || i.value);
       end loop;
    end;
    /
    15/02/2010 : ALBANIA
    13/02/2010 : ALGERIA
    14/02/2010 : AMERICA
    15/02/2010 : ARGENTINA
    15/02/2010 : AUSTRALIA
    15/02/2010 : AUSTRIA
    15/02/2010 : AZERBAIJAN
    13/02/2010 : BAHRAIN
    12/02/2010 : BANGLADESH

    Si vous exécutez ce code qui boucle sur tous les territoires valides, vous verrez que le where to_char(DATEJOUR, 'D')=1 ramène des dates très variables d'un territoire à l'autre.

    Je ne vois donc pas de moyen de s'abstraire des paramètres NLS, que ce soit NLS_DATE_LANGUAGE comme je l'ai utilisé, ou NLS_TERRITORY qui est nécessaire dans votre proposition.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Il y avait donc bien une subtilité, ça m'étonnait aussi...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Discussions similaires

  1. comment extraire le jour d'une date
    Par redabadache3 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/11/2007, 10h31
  2. Calcul nombre de jours commun à 2 périodes
    Par msalque dans le forum Excel
    Réponses: 4
    Dernier message: 13/08/2007, 16h06
  3. Réponses: 4
    Dernier message: 20/04/2007, 11h23
  4. extraire le jour de la semaine
    Par philou1211 dans le forum Windows XP
    Réponses: 4
    Dernier message: 16/04/2007, 15h11
  5. Extraire le jour et le mois d'une date
    Par viny dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/12/2006, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo