Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 16/04/2007, 14h41   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 6
Points : 2
Points : 2
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
enovia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 15h04   #2
Nouveau Membre du Club
 
Développeur Java
Inscription : septembre 2006
Messages : 37
Détails du profil
Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : septembre 2006
Messages : 37
Points : 29
Points : 29
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 :
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".
xss.xas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 15h24   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 6
Points : 2
Points : 2
Par défaut sous chaine en partant de la fin DB2

merci pour la réponse rapide
mais avez vous une solution pour DB2?
enovia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 15h58   #4
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

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

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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 :
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.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h48.


 
 
 
 
Partenaires

Hébergement Web