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 :

insertion d'une partie d'une colonne dans une autre colonne


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut insertion d'une partie d'une colonne dans une autre colonne
    Salut,

    J'ai un petit souci.

    J'ai une table qui contient un attribut de type date (dd/mm/yyyy).
    Je voudrais extraire les YYYY de la date et les insérer dans un attribut, ainsi que les mois et les jours.
    À la fin j'aurai une table qui à la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        date      | annee | mois | jour
    --------------+-------+------+-----
      12/08/1998  |  1998 |  08  |  12
    Quelqu'un peut-il m'aider?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez utiliser la fonction to_char avec le format adéquat.
    yyyy pour les années, mm pour les mois, dd pour les jours.

    Au niveau SQL, pour mettre à jour celà se fait avec un UPDATE, de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MaTable
       SET annee = to_char(MaDate, 'yyyy'),
           mois  = to_char(MaDate,   'mm'),
           jour  = to_char(MaDate,   'dd');
    Par contre, au niveau structure ce n'est pas une bonne idée.
    Le mieux c'est de calculer ces données à la volée quand vous en avez besoin.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    Juste deux précisions :
    - la commande "Extract" peut être utilisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE MaTable
       SET annee = Extract(Year From MaDate),
           mois  = Extract(Month From MaDate),
           jour  = Extract(Day From MaDate);
    - je suis d'accord avec Waldar, en général c'est une mauvaise idée d'avoir des données redondantes, il y a toujours un risque d'incohérence entre ta date et tes colonnes jour, mois et annee. Si tu as très souvent besoin de ces infos, tu peux aussi créer une view
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Create Or Replace View test As
      Select T.*, 
             Extract(Year From MaDate) annee, 
             Extract(Month From MaDate) mois, 
             Extract(Day From MaDate) jour
        From MaTable T;

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Attention, il y a une différence entre to_char(sysdate, 'MM') et extract (MONTH FROM sysdate)
    Le premier cas, c'est un VARCHAR2 (et le résultat sera '06')
    Le second cas, c'est un NUMBER (et le resultat sera 6)


    PS : le extract est plus rapide
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Très bonne remarque.

    Oui, c'est une mauvaise idée dans les OLTP mais ça c'est fait dans les DataWarehouse.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Tout-à-fait, comme le mois attendu était '08', j'ai utilisé to_char

    Citation Envoyé par mnitu Voir le message
    Oui, c'est une mauvaise idée dans les OLTP mais ça c'est fait dans les DataWarehouse.
    Dans les datawarehouse, on a plutôt une table calendrier qui fournit ce genre d'informations, enfin dans ceux où je suis passé, mais je pense que c'est la meilleure pratique

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Oui mais cette table peut être dénormalisé. Voilà à ce que j'avais pensé.
    Nom : Fact.JPG
Affichages : 78
Taille : 60,4 Ko

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oui, d'ailleurs c'est ce que je fais

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/04/2010, 15h42
  2. Réponses: 1
    Dernier message: 11/03/2010, 14h47
  3. récupérer une partie d'un texte dans une variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/05/2008, 11h18
  4. Réponses: 4
    Dernier message: 11/12/2006, 09h18
  5. Réponses: 2
    Dernier message: 26/07/2006, 10h03

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