[SQL] Afficher les x premiers mots d'un enregistrement

Afficher les x premiers mots d'un enregistrement [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 19-07-2007 à 08:50:38    

Bonjour à tous,
 
Vous connaissez certainement la fonction LIMIT de SQL. J'aimerais savoir s'il existe de la meme facon une fonction qui me permettrait de sélectionner qu'une partie d'une valeur d'un enregistrement.
 
Je vais m'illustrer :
Soit une table MA_TABLE avec un champ MON_CHAMP de type LONGTEXT
Je voudrais faire un SELECT sur MON_CHAMP de manière à ce qu'il me retourne disons les 30 premiers caractères (ou 30 premiers mots serait encore mieux). Est ce que cela est possible directement via SQL ?
 
Merci de vos réponses

Reply

Marsh Posté le 19-07-2007 à 08:50:38   

Reply

Marsh Posté le 19-07-2007 à 09:04:51    

30 premiers caractères: select substring(tonChamps,1,30) ...
30 premiers mots: pas vraiment possible directement dans la directement dans une requête ( a moins de faire une procédure). Pourquoi ne pas le faire coté traitement?
 
Note: LIMIT est tout sauf du SQL. C'est une instruction "spécifique" MySQL.

Reply

Marsh Posté le 19-07-2007 à 09:15:43    

pour le nombre de mot c'est un peu bancal mais un truc du genre un peu plus affiné devrait pouvoir marcher, il y a surement des cas spéciaux a gerer.
 
en oracle ca donnerait +/-:
 

Code :
  1. select substr(LaChaineDeCaratere,1,length(instr(replace(LaChaineDeCaratere,'''',' '),' ',30))) les30PremiersMots
  2. from maTable


 
ca correspond a aller chercher la position du 30ème espace, en remplacant d'abord les ' par un espace pour que "l'espace" soit consideré comme deux mots, et des qu'on a ce nombre de caracteres on va chercher la sous-chaine.
la il y a des adaptations a faire mais l'idée est la

Reply

Marsh Posté le 19-07-2007 à 09:26:41    

c'est possible ce que tu dis mais dans la réalité c'est trop compliqué à gérer car il faut également prendre en compte la ponctuation ou les problèmes genre double espace.

 

sinon dans ton machin je pense qu'il y a deux erreurs :o

  • le lenght ne sert à rien car instr retourne déjà un entier
  • il manque un +30 après le instr correspondant aux caractères "supprimés" par ton replace.


Je maintiens que c'est pas une bonne idée de le faire dans le select :o


Message édité par anapajari le 19-07-2007 à 09:27:11
Reply

Marsh Posté le 19-07-2007 à 09:34:00    

anapajari a écrit :

30 premiers caractères: select substring(tonChamps,1,30) ...
30 premiers mots: pas vraiment possible directement dans la directement dans une requête ( a moins de faire une procédure). Pourquoi ne pas le faire coté traitement?
 
Note: LIMIT est tout sauf du SQL. C'est une instruction "spécifique" MySQL.


 
oops autant pour moi. ca fait tellement longtemps que je ne fais plus que du MySQL que j'ai généralisé le LIMIT :)
sinon pour le substring, ca marche impecable, merci
je vais essayer de bidouiller l'autre soluce pour selectionner que les mots

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed