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 :

pb requete avec date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Par défaut pb requete avec date
    Bonjour,

    après avoir créer une requete selon plusieurs critères, cette dernière me donne les données que je souhaite mais il me faut faire un dernier tri sur un champ date. (avec une condition comme IF, par exemple).
    Est ce possible avec une requete SQL simple ou faut il passer par pl/sql ?

    PS : mes conditions à rajouter sont du type :
    IF DATSSE>'&date1' THEN NBJOUR:=('&date2'-DATESE)+1;
    ELSEIF DATSSE BETWEEN '&date1' AND '&date2' THEN NBJOUR:=(DATSSE-DATESE)+1;
    END IF;

    Merci de vos renseignements.

  2. #2
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Bonjour,

    Quelle est votre requete initiale et que voulez-vous ajouter comme critére de tri ?

    LBO72.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Par défaut
    voici ma requete:

    spool GIR.lst
    rem accept date1 prompt 'ENTRER LA DATE DE DEBUT DE SELECTION (JJMMAA) : '
    rem accept date2 prompt 'ENTRER LA DATE DE FIN DE SELECTION (JJMMAA) : '
    SELECT CHAMP1,CHAMP2,DATEE,DATES,CHAMP3,CHAMP4,CHAMP5
    FROM SEJ,UFM
    WHERE NUUFSE=NUFMUF
    AND CHAMP2 IS NOT NULL
    AND DATES IN ('1/1/07', '31/12/99')
    AND CHAMP4 IN ('1/1/07', '1/12/04');
    spool off


    je souhaiterais intégrer à ma requete un champ calculé (NBJOUR) qui donnerait le nb de jour séparant 2 dates.
    par exemple, l'instruction if conviendrait avec ces paramètres (enfin je pense):
    IF DATES>'&date2' THEN NBJOUR:=('&date2'-DATEE)+1;
    ELSEIF DATES BETWEEN '&date1' AND '&date2' THEN NBJOUR:=(DATES-DATEE)+1;
    END IF;

    Merci de vos renseignements.

  4. #4
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Salut,

    Je pense que vous êtes obligé de le faire dans du plsql et d'utiliser du sql dynamique.

    LBO72.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Par défaut
    est ce que cette requete conviendrait ?

    spool GIR.lst
    accept date1 prompt 'ENTRER LA DATE DE DEBUT DE SELECTION (JJMMAA) : '
    accept date2 prompt 'ENTRER LA DATE DE FIN DE SELECTION (JJMMAA) : '
    DECLARE
    NBJOUR NUMBER;
    BEGIN
    SELECT NUHOSE,NGIRSE,DATESE,DATSSE,LBRMUF,DAEFUF,NBJOSE
    IF DATSSE>'&date1' THEN NBJOUR:=('&date2'-DATESE)+1;
    ELSEIF DATSSE BETWEEN '&date1' AND '&date2' THEN NBJOUR:=(DATSSE-DATESE)+1;
    END IF;
    FROM SEJ,UFM
    WHERE NUUFSE=NUFMUF
    AND NGIRSE IS NOT NULL
    AND DATSSE IN ('1/1/07', '31/12/99')
    AND DAEFUF IN ('1/1/07', '1/12/04');
    END;
    spool off

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    (le # dans le menu d'edition des messages)

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par LBO72 Voir le message
    Salut,

    Je pense que vous êtes obligé de le faire dans du plsql et d'utiliser du sql dynamique.

    LBO72.
    Fatigué LBO ? Avec un CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT nuhose,ngirse,datese,datsse,lbrmuf,daefuf,nbjose
    	(CASE WHEN datsse>'&date1' THEN '&date2'-datese +1
    		WHEN datsse BETWEEN '&date1' AND '&date2' THEN datsse-datese+1
    		ELSE NULL
    	END ) AS nbjour
    FROM SEJ,UFM
    WHERE nuufse=nufmuf
    AND ngirse IS NOT NULL
    AND datsse IN ('1/1/07', '31/12/99')
    AND daefuf IN ('1/1/07', '1/12/04');

  8. #8
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    McM
    Fatigué LBO ? Avec un CASE :

    C'est sûrement ça


    SELECT nuhose,ngirse,datese,datsse,lbrmuf,daefuf,nbjose,
    (CASE WHEN datsse>'&date1' THEN '&date2'-datese +1
    WHEN datsse BETWEEN '&date1' AND '&date2' THEN datsse-datese+1
    ELSE NULL
    END ) AS nbjour
    FROM SEJ,UFM
    WHERE nuufse=nufmuf
    AND ngirse IS NOT NULL
    AND datsse IN (to_date('1/1/07','DD/MM/YY'), to_date('31/12/99','DD/MM/YY'))
    AND daefuf IN (to_date('1/1/07','DD/MM/YY', to_date('01/12/04', 'DD/MM/YY'));

    Pour une question de portabilité.
    On peut aussi utiliser un IF ou un DECODE pour répondre au PB


  9. #9
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Faut être cohérent dans tes demandes !

    Ca c'est que je t'ai codé : Ton premier message
    Citation Envoyé par otaquet Voir le message
    Bonjour,
    PS : mes conditions à rajouter sont du type :
    IF DATSSE>'&date1' THEN NBJOUR:=('&date2'-DATESE)+1;
    ELSEIF DATSSE BETWEEN '&date1' AND '&date2' THEN NBJOUR:=(DATSSE-DATESE)+1;
    END IF;
    Ceci arrive ensuite.
    Citation Envoyé par otaquet Voir le message
    Les conditions que je souhaite poser sont :
    - Si DATSSE > &date2
    - Si DATSSE entre &date1 AND &date2.
    Et encore quelque chose de différent :
    Citation Envoyé par otaquet Voir le message
    A chaque fois que la requête rencontre DATSSE=31/12/2099 alors NBJOUR=date2-date1
    Et lorsque DATSSE est comprise entre date1 et date2 alors NBJOUR=DATSSE-date1
    Alors bon, voici comment marche le decode avec sign:
    Tu fait une différence de date (dat1 - dat2),
    si c'est >0 c'est que dat1 > dat2,
    si = 0 c'est que dat1 = dat2
    Si <0 c'est que dat1 < dat2

    Un sign() sur ce résultat, et tu peux tester par decode dans quel cas tu es.

Discussions similaires

  1. [MySQL] requete avec date du jour - 30
    Par le69 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/01/2013, 15h38
  2. [Access] requête avec date
    Par hiko-seijuro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/08/2006, 09h05
  3. [debutant]Probleme de requete avec date
    Par shub dans le forum Access
    Réponses: 9
    Dernier message: 12/05/2006, 10h01
  4. requete avec date et heure
    Par robert_trudel dans le forum Access
    Réponses: 2
    Dernier message: 26/04/2006, 00h15
  5. [MySQL] requete avec date
    Par le69 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/12/2005, 21h31

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