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 :

Update de date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Par défaut Update de date
    Bonjour,

    J'ai importé des données d'une base vers une autre (toujours sous Oracle) et petit problème avec des dates de naissance puisque toutes les dates qui étaient de 1900 à 1999 se retrouvent toutes sup à 2000 (ce qui se voit pas au premier abord car les sorties retournent l'année sur 2 chiffres).

    Quelle est la bonne requete pour update seulement la partie '20' de l'année pour la remettre à '19' ?

    merci d'avance

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Bonjour,

    Un petit mix de to_char/to_date devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update myTable
    set myDate = to_date('19'||substr(to_char(myDate,'YYYYMMDD'),3),'YYYYMMDD')
    Mais comme je me demande comment tu va faire entre un 2010 natif et un 2010 qui était avant un 1910, je pense que tu devrais plutôt régler le problème à la source, c'est à dire ton import de données !

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Il suffit de retrancher 100 ans, soit 1200 mois.
    Je vous propose deux syntaxes dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
        VDate,
        add_months(VDate, -1200),
        VDate - INTERVAL '100' YEAR(3)
    from VTable
    Êtes-vous bien certain de n'avoir aucune date de naissance après 2000 qui serait bien positionnée, car un update massif ne fera aucune distinction.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Par défaut
    Il ne s'agit que d'adultes, toutes les dates sont bien antérieures à 2000.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    En ce cas vous pouvez utilisez la méthode de Scorpio (dont je reprends les noms de table / date) ou une de celle que je vous ai proposé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE myTable
    SET myDate = add_months(myDate, -1200)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE myTable
    SET myDate = myDate - INTERVAL '100' YEAR(3)
    Cette dernière est à mon sens la plus élégante, et de plus cadre dans les normes SQL.

  6. #6
    Scorpi0
    Invité(e)
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Cette dernière est à mon sens la plus élégante, et de plus cadre dans les normes SQL.
    J'ai fait que répondre à l'énoncé, moi pas savoir réfléchir

Discussions similaires

  1. Probleme UPDATE avec date
    Par shub dans le forum Access
    Réponses: 7
    Dernier message: 21/06/2006, 13h39
  2. UPDATE avec date
    Par Skizo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/05/2006, 11h48
  3. Réponses: 10
    Dernier message: 07/03/2006, 13h30
  4. Update par date immédiatement inférieur
    Par MOLLET dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/11/2005, 19h05
  5. Update de date vide dans une table
    Par gidebo dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/03/2004, 16h48

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