Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 14/06/2005, 16h06   #1
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
Par défaut Séparer une chaine en 2

Bonjour à tous,

j'ai la table suivante:

Code :
1
2
3
4
CREATE TABLE LISTE_JOUEURS (
    INDEX_JOUEUR   INTEGER NOT NULL,
    NOM_JOUEUR     VARCHAR(100) NOT NULL,
);
Je l'ai modifié pour la rendre comme suit:

Code :
1
2
3
4
5
CREATE TABLE LISTE_JOUEURS (
    INDEX_JOUEUR   INTEGER NOT NULL,
    NOM_JOUEUR     VARCHAR(100) NOT NULL,
    PRENOM_JOUEUR  VARCHAR(50) DEFAULT 'Prenom' NOT NULL,
);
Je voudrais tronquer les données dans le champ NOM_JOUEUR en 2 pour séparer le nom et le prénom.

Je voudrais faire une requête de ce style:

Code :
1
2
3
UPDATE liste_joueurs lj
SET lj.Nom_Joueur = SUBSTRING(lj.nom_joueur FROM 1 FOR POSITION(' ' IN lj.Nom_Joueur)),
    lj.prenom_joueur = SUBSTRING(lj.Nom_Joueur FROM POSITION(' ' IN lj.Nom_Joueur) FOR LENGTH(lj.Nom_Joueur))
Mais je n'arrive pas à faire fonctionner les fonctions POSITION et LENGTH.
Peut-être ne sont-elles tout simplement pas définies? Peut-être en UDF? Pourtant IBExpert me les propose...

Comment je peux faire ça?

Merci d'avance...
zoubidaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2005, 16h12   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Si les UDF ne sont pas définies alors à l'exécution tu obtiendras un message d'erreur du style :
Citation:
Token unknown - line XXX, char YYY
(je parle par expérience 8) )
mais ça ne doit pas être le cas si tu les vois sous IBExpert.

Par conséquent, il est possible que tu ne t'en serves pas correctement : as-tu fais des recherches sur les FAQ et forums de ce site ?
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2005, 17h26   #3
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
J'ai fait quelques recherches pour ton problème : parmi les fonctions dispo sous les différents SGBD, j'ai remarqué que SUBSTRING n'est pas une fonction dispo sous Interbase et ce n'est pas non plus une fonction de la libraire rfunc (j'ai testé spontanément cette librairie).

Donc il faudrait que tu m'indiques de quelle librairie provient cette fonction pour que je puisse t'aider à comprendre comment s'en servir.
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2005, 18h27   #4
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
Citation:
Envoyé par Magnus
J'ai fait quelques recherches pour ton problème : parmi les fonctions dispo sous les différents SGBD, j'ai remarqué que SUBSTRING n'est pas une fonction dispo sous Interbase et ce n'est pas non plus une fonction de la libraire rfunc (j'ai testé spontanément cette librairie).

Donc il faudrait que tu m'indiques de quelle librairie provient cette fonction pour que je puisse t'aider à comprendre comment s'en servir.
Pourtant SUBSTRING fonctionne chez moi si je fais par exemple:

Code :
SELECT SUBSTRING(lj.NOM_JOUEUR FROM 1 FOR 5) FROM LISTE_JOUEURS
Je ne sais pas où est définie la fonction substring, mais je pense que c'est dans cette DLL: ib_udf.dll
zoubidaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2005, 18h35   #5
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
J'ai trouvé un début de réponse ici

Seulement, comment est-ce que je peux utiliser une procédure dans une requête update?
zoubidaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2005, 08h42   #6
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Ok, j'ai trouvé d'autres infos sur cette fonction SUBSTRING et je l'ai testé : ton utilisation m'a l'air correcte.

Par contre, je n'ai trouvé de fonctions POSITION et LENGTH ; si d'ailleurs tu recherches à obtenir la longueur d'une chaine de caractères, tu peux essayer la fonction STRLEN de la bibliothèque rfunc.

D'autre part, je comprends le traitement que tu veux faire mais je ne sais pas si dans une requête UPDATE on peux manipuler directement les champs de la table que l'on veut mettre à jour sans passer par un SELECT ?
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2005, 23h11   #7
Membre confirmé
 
Inscription : février 2003
Messages : 311
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2003
Messages : 311
Points : 293
Points : 293
Envoyer un message via MSN à zoubidaman
Je ne sais pas non plus, je montrais ça en guise d'exemple.

De toute manière je suis passé à un SELECT de tous les noms de la table, que je traite avec un programme C++, et j'update le tout...

Du coup je suis plus embêté avec tout ça

Merci pour ton aide!
zoubidaman 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 10h00.


 
 
 
 
Partenaires

Hébergement Web