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
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
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 :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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT CAST('2005-05-05' AS DATE) + 30 FROM BANQUES;
A lire aussi : les fonctions temporelles.
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>
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...
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau
"Expliquer empêche de comprendre si cela dispense de chercher"
Quiz Oracle : venez tester vos connaissances !
La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
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
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 correcteEnvoyé par SERVIROC
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 ...
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau
"Expliquer empêche de comprendre si cela dispense de chercher"
Quiz Oracle : venez tester vos connaissances !
La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
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.Envoyé par Xo
Tout les mois n'ont pas 30 jours.
D'autant plus qu'Oracle gére même les années bisextiles :
Par contre si tu veut ajouter un mois et pour les mêmes raisons la proposition suivante est erronné :
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
Parce qu'elle ajoute 30 jours et non pas un mois .Envoyé par Xo
Donc serviroc tu doit être prudent, que cherche tu exactement ajouter un mois ou 30 jours !!!
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
je cherche bien à ajouter un mois donc j'utiliserai cette requête:
Merci à tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE ma_table SET ma_date = ADD_MONTHS(ma_date, 1) WHERE ...
Je n'ai pas été assez précisEnvoyé par Jaouad
: 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
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau
"Expliquer empêche de comprendre si cela dispense de chercher"
Quiz Oracle : venez tester vos connaissances !
La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
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 :
En fait, pour calculer la date de fin, j'enlève un jour à la date de début et lui ajoute un mois.
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
Existe-il une possibilité de simplifier le tout ?
Merci beaucoup pour votre aide.
JPG
Votre question porte sur Oracle.
Il y a en effet plus court :
Le trunc sur la date de fin est pour enlever les heures / minutes / secondes : vous pouvez ne pas en avoir besoin.
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
C'est en effet plus court et en plus ça marche.
Merci beaucoup.
Partager