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 :

[Oracle] Trier avec une extraction au sein du chaine de car


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut [Oracle] Trier avec une extraction au sein du chaine de car
    Bonjour,

    Je ne parviens pas à trouver un moyen décrire ma requête SQL.

    J'ai une table MA_TABLE avec plusieurs colonnes dont une NOM est une chaine de caractères.
    Cette chaine de caractère est composée de la manière suivante :
    quelquechose1-quelquechose2-quelquechose3-ce_que_je_veux

    Je voudrais sélectionner dans ma table toutes les lignes pour lesquelles la partie ce_que_je_veux de MA_TABLE.NOM est distincte.

    j'ai essayé de compter les tirets avec COUNT mais je pense que c'est pa la façon la plus intelligente de résoudre le probleme (et en + pr l'instant cette requête marche pas )


    merci bcp a ceux qui se pencheront sur mon probleme

    PS: il n'y a pas de tirets au sein des quelquechose$i

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Quel SGBD ??????
    Script de creation + Jeu d'essais ????

    Ca ira 100000 fois plus vite pour ceux qui veulent t'aider

  3. #3
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    pardon,

    SGBD = Oracle

    jeu d'essais? je vois pas tres bien ce que tu veux dire

    je veux faire une requete sur une table et renvoyer le résultat dans un fichier CSV.
    je fais ma requête via PL/SQL

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ta modelisation serait peut etre a revoir pour faire ce genre de requete.

  5. #5
    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 magic charly
    jeu d'essais? je vois pas tres bien ce que tu veux dire
    cf http://www.developpez.net/forums/viewtopic.php?t=32668

  6. #6
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    revoir la modélisation? ... cette base n'est pas la mienne ...

    y a surement moins hardcore !

    je peux préciser un exemple si le premier post n'est pas assez explicite

    ||||||||||COLONNE 1 |COLONNE 2 | COLONNE 3
    LIGNE 1) 72 | FRANCE | Paris-maison7-wx3-www.site1.com
    LIGNE2) 121 | FRANCE | Paris-maison7-wx3-www.site2.com
    LIGNE3) 18 | FRANCE | Lille-mairie-mx3-www.site1.com

    je ne veux retourner que 2 de ces 3 trois lignes en résultat nécessairement la ligne 2 et la ligne 1 ou (exclusif) la ligne 3.

    car www.site2.com n'apparait qu'une fois
    alors que www.site1.com apparait 2 fois
    merci ...

    PS: j'ai l'impression que je m'enfonce dans mon explication

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Il n'y a aucune solution fiable à votre problème.

    La modélisation étant particulièrement mauvaise et en dehors de toutes les régles de modélisation fait que vos données sont inexploitable.

    Un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    CREATE TABLE T_DEGUEULASSE_DLG
    (COLONNE1 INT,
     COLONNE2 VARCHAR(16),
     COLONNE3 VARCHAR(128))
     
    INSERT INTO T_DEGUEULASSE_DLG VALUES (72, 'FRANCE', 'Paris-maison7-wx3-www.site1.com')
     
    INSERT INTO T_DEGUEULASSE_DLG VALUES (121, 'FRANCE', 'Paris-maison7-wx3-www.site2.com')
     
    INSERT INTO T_DEGUEULASSE_DLG VALUES (18, 'FRANCE', 'Lille-mairie-mx3-www.site1.com')
     
    INSERT INTO T_DEGUEULASSE_DLG VALUES (123, 'FRANCE', 'Saint-germain en laye-mairie-mx3-www.site1.com')
     
    -- Recherche de la 4e information :
     
    SELECT COLONNE1, COLONNE2, 
           SUBSTRING(COLONNE3, CHARINDEX('-', COLONNE3) + 1, LEN(COLONNE3) - CHARINDEX('-', COLONNE3)) AS COLONNE3
    FROM   
    (
    SELECT COLONNE1, COLONNE2, 
           SUBSTRING(COLONNE3, CHARINDEX('-', COLONNE3) + 1, LEN(COLONNE3) - CHARINDEX('-', COLONNE3)) AS COLONNE3
    FROM   
    (
    SELECT COLONNE1, COLONNE2, 
           SUBSTRING(COLONNE3, CHARINDEX('-', COLONNE3) + 1, LEN(COLONNE3) - CHARINDEX('-', COLONNE3)) AS COLONNE3
    FROM   T_DEGUEULASSE_DLG
    ) T
    ) TT
     
    COLONNE1    COLONNE2         COLONNE3                                                                                                                         
    ----------- ---------------- ----------------------
    72          FRANCE           www.site1.com
    121         FRANCE           www.site2.com
    18          FRANCE           www.site1.com
    123         FRANCE           mx3-www.site1.com

    Plantage dans la ligne 123 car l'utilisateur à saisie un tiret dans le nom de la ville !

    A +

  8. #8
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    merci bcp pour cette explication

    j'ai regardé attentivemnt comment tu avaiss utilisé substring.

    j'ai bien consience que la base n'a pas été conçue dans le but de répondre à mon probleme mais cette base a été conçue par quelqu'un d'autre et je n'y ai accès que pour extraire les données qui me sont utiles pour ma propre base.

    il n'y a pas de tirets dans les 3 premiers champs (par convention).

    je pense donc que ce que tu as écrit va m'être très utile

    encore merci

  9. #9
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    si j'ai bien compris tu fais 3 tronquages successifs en repérant la position du tiret avec charindex?

    Lyon-maison7-bx2-www.site.com
    devient
    maison7-bx2-www.site.com
    devient
    bx2-www.site.com
    devient
    www.site.com

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    oui.

    On peut encapsuler le tout dans un seul appel de table, ce sera plus performant mais nettement mois lisible.

    Sinon, réaliser une UDF qui compte trouve la position d'un caractère pour sa nieme occurence.
    A +

  11. #11
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    Apres avoir retouché ta requête pour qu'elle colle exactement à ce que je voulais faire, j'obtiens une erreur en l'exécutant.

    ORA-00904: "SUBSTRING" : invalid identifier

    j'imagine que cela signifie que je ne dois pas avoir la bonne librairie. Je ne sais pas du tout comment fonctionnent les librairies d'un point de vue SQL.

    Est ce possible de rajouter quelquechose dans ma bibliothèque qui reconnaitrait les fonctions associées à la modification de chaines de caractères comme locate, substring, length... :

  12. #12
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    en remplaçant SUBSTRING par SUBSTR l'erreur n'apparait plus :

    il "comprend" l'identifier mais j'ai le meme soucis pour Charindex...

    Qqn saurait il ce que l'on peut utiliser a la place de Charindex?

  13. #13
    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 magic charly
    Qqn saurait il ce que l'on peut utiliser a la place de Charindex?
    cf Fonctions de chaînes de caractères :

    - SUBSTR est effectivement propre à Oracle.
    - Pour la (première) position d'une chaîne dans une autre, c'est INSTR.

  14. #14
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    Tout d'abord merci a tous et particulierement a Xo et SQLpro

    En utilisant un substr(COLONNE3, instr('-',COLONNE3,1,3)) AS COLONNE3

    j'ai réussi a résoudre mon probleme... ss même avoir besoin de tronquer 3 fois.

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

Discussions similaires

  1. [XL-2003] Trier avec une formule
    Par jkrtu dans le forum Excel
    Réponses: 2
    Dernier message: 22/10/2009, 14h53
  2. Oracle/XML avec une requete imbriquée
    Par FABFAB125 dans le forum SQL
    Réponses: 16
    Dernier message: 20/07/2007, 12h52
  3. [Oracle] jointures avec une somme sur deux champs
    Par guggus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/10/2006, 17h06
  4. [Oracle] probleme avec une date
    Par ghostdog dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2006, 10h59
  5. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04

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