Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 14/06/2011, 11h35   #1
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Par défaut Update à la volée

Bonjour à tous,

J'ai une procédure stockée qui fonctionne bien, elle insère des données d'une table A à une table B et une fois insérées elle vide la table A.
Tout se passe bien sauf que la date dans la table B est de la forme DD/MM/YY: me donne par exemple 13/06/20.
En fait j'ai trouvé le problème dans ma procédure qui prend les deux premiers chiffres de l'année et non les deux derniers...


Sauf que maintenant j'aimerais faire un UPDATE de la ma table B pour mettre toutes les dates dd/mm/20 en dd/mm/11.
Evidemment je pourrais faire un:

Code :
UPDATE MATABLEB SET FSDH_DATE = '02/06/11' WHERE to_char(FSDH_DATE, 'DD/MM/YY') = '02/06/20';
Et répéter cette requête sur toutes les dates impactées. Mais y aurait-il une manière de faire autement? Une requête qui me ramene toutes les dates dd/mm/20 et qui update en même temps?

Merci d'avance à tous!
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h19   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
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 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Comment se compliquer la vie en une leçon !
Pourquoi ne pas utiliser tout simplement le type date ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 13h44   #3
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Toutes les dates dd/mm/20 : donc l'année = 2020 ?
=>
Code :
1
2
 
WHERE EXTRACT(YEAR FROM FSDH_DATE) = 2020
Si tu veux retrancher 9 ans sur la date courante :
Code :
1
2
 
SET FSDH_DATE = FSDH_DATE - INTERVAL '9' YEAR
... puis si vraiment tu tiens à avoir 1920, 1820, ... tu peux prendre
Code :
1
2
 
WHERE mod(EXTRACT(YEAR FROM FSDH_DATE), 100) = 20
NOTE : ah oui Laurent, tu vas me dire qu'il y a un problème avec les années avant JC
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h14   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
je vais aussi te dire que FSDH_DATE - INTERVAL '9' YEAR ne marche pas toujours

Code :
1
2
3
4
5
6
SQL> WITH t AS (SELECT date '2020-02-29' fsdh_date FROM dual)
  2  SELECT FSDH_DATE - INTERVAL '9' YEAR FROM t ;
SELECT FSDH_DATE - INTERVAL '9' YEAR FROM t
                 *
ERROR at line 2:
ORA-01839: date NOT valid FOR month specified
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2011, 15h28   #5
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Bien joué, c'est diabolique comme d'hab
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 20h19   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Crée une colonne de type date FSDH_DATE2, puis met à jour cette colonne :
Code :
UPDATE MATABLEB SET FSDH_DATE2 = to_date(FSDH_DATE||'11','dd/mm/yyyy')
Puis drop la colonne FSDH_DATE et renomme la colonne FSDH_DATE2 en FSDH_DATE.
Maintenant tu as une colonne de type date, tu peux donc travailler proprement.
skuatamad 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 05h09.


 
 
 
 
Partenaires

Hébergement Web