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

Langage SQL Discussion :

Requête date mois+1


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 5
    Points
    5
    Par défaut Requête date mois+1
    Bonjour,
    je souhaiterais avoir une requête qui rajoute un mois (ou 30 jours) a une date du genre ...

    UPDATE ma_table SET ma_date=ma_date.month+1 WHERE ...

    enfin quelque chose dans ce genre, merci beaucoup

    Cordialement

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Tu veux une réponse précise alors soit plus précis : quelle est sont SGBD et quelle est sa version (cf les règles du forum) ?

    Sous Interbase 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST('2005-05-05' AS DATE) + 30
    FROM BANQUES;
    retourne 04.06.2005 00:00 mais je ne suis pas sûr que l'ajout de dates s'effectue de cette manière d'après la norme SQL : cf l'article de SQLPro sur les dates.

    A lire aussi : les fonctions temporelles.

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> select sysdate from dual; 
     
    SYSDATE
    --------
    19/09/05
     
    SQL>  select add_months (sysdate,1) from dual ;
     
    ADD_MONT
    --------
    19/10/05
     
    SQL>

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Si tu as lu l'article préconisé par Magnus, tu te seras rendu compte qu'il faut faire extrêmement attention avec l'ajout de mois qui peut donner des résultats divers et variés en fin de mois ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT ADD_MONTHS(TO_DATE('31/01/2005', 'dd/mm/yyyy'), 1) FROM DUAL;
     
    ADD_MONT
    --------
    28/02/05
    ...

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 5
    Points
    5
    Par défaut
    excusez-moi pour mes imprécisions, ma base est sous Oracle 10g !

    mon problème est que je veux faire un update et non pas un select et j'aimerais si possible me limiter a une seule requête

    Merci

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par SERVIROC
    mon problème est que je veux faire un update et non pas un select et j'aimerais si possible me limiter a une seule requête
    Maintenant que tu a la syntaxe pour l'ajout de jours ou de mois, tu aurais pu essayer ta proposition (cf ton premier post), elle est correcte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE ma_table SET ma_date = ma_date +30 WHERE ... 
    -- OU
    UPDATE ma_table SET ma_date = ADD_MONTHS(ma_date, 1) WHERE ...

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Xo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT ADD_MONTHS(TO_DATE('31/01/2005', 'dd/mm/yyyy'), 1) FROM DUAL;
     
    ADD_MONT
    --------
    28/02/05
    ...
    Je ne voit pas ce qu'ily a d'étonnant, comme l'indique la fonction d'Oracle , elle ajoute un mois et pas 30 : donc si on est à la fin du mois de janvier dans un mois on sera à la fin du mois de février.

    Tout les mois n'ont pas 30 jours.

    D'autant plus qu'Oracle gére même les années bisextiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL>  SELECT ADD_MONTHS(TO_DATE('31/01/2004', 'dd/mm/yyyy'), 1) FROM DUAL; 
     
    ADD_MONT
    --------
    29/02/04
    Par contre si tu veut ajouter un mois et pour les mêmes raisons la proposition suivante est erronné :

    Citation Envoyé par Xo
    UPDATE ma_table SET ma_date = ma_date +30
    Parce qu'elle ajoute 30 jours et non pas un mois .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL>  select to_date('31/01/2005') + 30 from dual ; 
     
    TO_DATE(
    --------
    02/03/05
    Donc serviroc tu doit être prudent, que cherche tu exactement ajouter un mois ou 30 jours !!!

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 28
    Points : 5
    Points
    5
    Par défaut
    je cherche bien à ajouter un mois donc j'utiliserai cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ma_table SET ma_date = ADD_MONTHS(ma_date, 1) WHERE ...
    Merci à tous

  9. #9
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Jaouad
    Je ne voit pas ce qu'ily a d'étonnant, comme l'indique la fonction d'Oracle , elle ajoute un mois et pas 30 : donc si on est à la fin du mois de janvier dans un mois on sera à la fin du mois de février.
    Je n'ai pas été assez précis : je n'ai pas dis que c'était étonnant ou faux, bien au contraire, j'ai préféré mettre en garde notre ami contre l'utilisation d'une unité de mesure (le mois) qui est "variable".

    Illustration de cette mise en garde :
    '31/01/2005' + 1 mois = '28/02/2005'
    '28/02/2005' - 1 mois = '28/01/2005'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SELECT ADD_MONTHS(TO_DATE('28/02/2005', 'dd/mm/yyyy'), -1) FROM DUAL;
     
    ADD_MONT
    --------
    31/01/05

  10. #10
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 168
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Je reviens sur ce vieux post (ai-je bien fait ?), car j'ai trouvé un élément de réponse à une question presque similaire que je posais.

    Pour obtenir la date du début de mois (DEB) et la date de fin de mois (FIN)d'une date (madate), exemple 01/04/2010 et 30/04/2010 pour aujourd'hui (27/04/2010) j'utilise ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    to_date('01/'||to_char(to_date(madate,'dd/mm/yyyy'),'mm/yyyy'),'dd/mm/yyyy') DEB,
    add_months(to_date('01/'||to_char(to_date(madate,'dd/mm/yyyy'),'mm/yyyy'),'dd/mm/yyyy') -1,1) FIN
    En fait, pour calculer la date de fin, j'enlève un jour à la date de début et lui ajoute un mois.

    Existe-il une possibilité de simplifier le tout ?

    Merci beaucoup pour votre aide.

    JPG

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Votre question porte sur Oracle.
    Il y a en effet plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select trunc(sysdate, 'mm') as deb,
           trunc(last_day(sysdate)) as fin
      from dual;
     
    DEB		FIN
    01/04/2010	30/04/2010
    Le trunc sur la date de fin est pour enlever les heures / minutes / secondes : vous pouvez ne pas en avoir besoin.

  12. #12
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 168
    Points : 77
    Points
    77
    Par défaut
    C'est en effet plus court et en plus ça marche.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Problème bizarre requête date
    Par masseur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 13h12
  2. Déclencher une requête chaque mois
    Par marie10 dans le forum Access
    Réponses: 1
    Dernier message: 27/01/2006, 17h55
  3. [requête] Date à problème
    Par uloaccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/01/2006, 17h19
  4. Date Mois N-1
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 05/10/2005, 16h16
  5. Comment grouper une requête par mois ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2005, 12h01

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