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

DB2 Discussion :

recherche d'une sous chaine à partir de la fin


Sujet :

DB2

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut recherche d'une sous chaine à partir de la fin
    Bonjour,

    J'ai un champ tel que le suivent : "ch1:ch2:ch3"

    J'ai récupérer une sous chaine en recherchant grâce à la fonction 'locate' la chaine de caractere ':'.
    Sauf que cela me renvoie comme résultat : "ch2:ch3"

    Le client ne veut récupérer que "ch3". je me suis dit alors qu'il faut que je partes de la fin de la chaine de caractere et remonter jusqu'au ':' pour récupérer ch3 mais je ne sais pas comment faire.

    La fonction lastindexof en javascript semble le faire mais je n'ai pas trouvé l'équivalent en db2 et pas trouver comment faire avec la fonction subtr.

    Pouvez vous m'aider? merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 37
    Points : 36
    Points
    36
    Par défaut
    Rapidement, 3 pistes en Java (pour DB2 spécifiquement j'en sais rien) :

    1 - La classe java.util.StringTokenizer
    2 - Faire plusieurs appels récursifs à indexOf et substr jusqu'à ce que indexOf renvoie -1.
    3 - Ecrire toi-même la fonction de recherche en partant de la fin :p


    En vitesse, un prototype pour le 2-:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static String getLastToken(String str, char separator) {
    		if (str.indexOf(separator) != -1)
    			return getLastToken(str.substring(str.indexOf(separator)+1), separator);
    		else
    			return str;
    	}
    Cette fonction renvoie le dernier "token" d'une chaine. Si tu veux renvoyer l'avant dernier, l'avant-avant dernier (etc.) token d'une chaîne, je te laisse improviser =)
    T'auras un truc qui marche aussi en JavaScript en remplacant "public static String" par "function", et "String str, char token" par "str, token".

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut sous chaine en partant de la fin DB2
    merci pour la réponse rapide
    mais avez vous une solution pour DB2?

  4. #4
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Dans les versions DB2 que je connais, il n'y a pas de fonction prédéfinie pour cela. tu dois créer ta propre fonction.
    A titre d'exemple, voici une fonction tirée de la doc qui inverse une chaine de caractère. tu peux éventuellement l'utiliser comme tel et puis faire un locate ou un posstr mais le mieux serait de faire une fonction spécifique.
    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
     
       CREATE FUNCTION REVERSE(INSTR VARCHAR(4000))
         RETURNS VARCHAR(4000)
         DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL
         BEGIN ATOMIC
         DECLARE REVSTR, RESTSTR VARCHAR(4000) DEFAULT '';
         DECLARE LEN INT;
         IF INSTR IS NULL THEN
         RETURN NULL;
         END IF;
         SET (RESTSTR, LEN) = (INSTR, LENGTH(INSTR));
         WHILE LEN > 0 DO
         SET (REVSTR, RESTSTR, LEN) 
           = (SUBSTR(RESTSTR, 1, 1) CONCAT REVSTR, 
           SUBSTR(RESTSTR, 2, LEN - 1),
           LEN - 1);
         END WHILE;
         RETURN REVSTR;
       END
    Si tu la réalise, poste la, je la placerai dans la FAQ.

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

Discussions similaires

  1. Récupérer une sous chaine à partir d'un mot
    Par tizi15 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/05/2011, 15h45
  2. recherche d'une sous chaine
    Par TaymouWan dans le forum C#
    Réponses: 9
    Dernier message: 26/03/2009, 15h20
  3. [String] Recherche d'une sous-chaine
    Par opensource dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/09/2007, 16h19
  4. Extraction d'une sous-chaine à partir d'une chaine principale
    Par gazere dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/06/2007, 04h08
  5. Réponses: 4
    Dernier message: 07/12/2006, 11h01

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