Connaitre l'enregistrement le plus long [Trouvé]

Connaitre l'enregistrement le plus long [Trouvé] - SQL/NoSQL - Programmation

Marsh Posté le 02-01-2006 à 17:19:37    

Bonjours.
Je voudrais connaitre l'enregistrement ayant la valeur d'un champs le plus longue dans la table.
Voila mon cas :
j'ai une table ayant ces enregistrement.
Ex :
champ 1 : Code
Champ 2 : idsociete
 
int.inf.too.sup.tva;    221
int.inf.too.sup.tva;    071
int.inf.too.sup.tva;    46
int.inf.too.sup.faq.lst;69
int.inf                     ;221
int.inf                     ;071
 
voici ma requete :  
SELECT as_txn_code FROM vw_appli_societes WHERE CHARINDEX(as_txn_code,'int.inf.too.sup.tva.221.rec')>0
 
En faite, je voudrais dans ce cas qu'il m'affiche les enregistrements le plus proche de celui que je demande, en gros :

Code :
  1. int.inf.too.sup.tva;    221
  2. int.inf.too.sup.tva;    071
  3. int.inf.too.sup.tva;    46


 
Pourtant ces enregistrements sont bonnes mais je ne le veut pas.

Code :
  1. int.inf                     ;221
  2. int.inf                     ;071


Comment puis je trouver mon resultat ?
Merci et bonne année ;)


Message édité par Berceker United le 02-01-2006 à 18:28:19
Reply

Marsh Posté le 02-01-2006 à 17:19:37   

Reply

Marsh Posté le 02-01-2006 à 17:30:39    

j'ai rien compris :D

Reply

Marsh Posté le 02-01-2006 à 17:41:10    

Arjuna a écrit :

j'ai rien compris :D


Bon ok je vais tenter de reformuler  [:chewyy]  
 
Dans cette requete :

Code :
  1. SELECT as_txn_code FROM vw_appli_societes WHERE CHARINDEX(as_txn_code,'int.inf.too.sup.tva.221.rec')>0


Je demande des enregistrements ayant au moin un morceau de cette chaine. int.inf.too.sup.tva.221.rec  
mais je veux celle qui se rapproche le plus ou logiquement la plus longue car la structure des données est hierarchique (arbre).
...
int.inf.too
int.inf.too.sup
int.inf.too.sup.tva
int.inf.too.sup.tva.221
int.inf.too.sup.tva.221.rec
Avec ma requete ci-dessus je voudrai qu'il me retourne que "int.inf.too.sup.tva.221" et pas les autres de longueur moin importante. En gros je veux qu'il me retourne un resultat dont les enregistrements ont la plus grande longueur.

Reply

Marsh Posté le 02-01-2006 à 17:52:11    

utilise un max(length(as_txn_code)) dans un filtre (sous-requête)
 
mais j'avoue que je trouve ça un peu chelou :D)

Reply

Marsh Posté le 02-01-2006 à 17:54:39    

soit :
 

Code :
  1. SELECT as_txn_code
  2. FROM vw_appli_societes
  3. WHERE CHARINDEX(as_txn_code,'int.inf.too.sup.tva.221.rec')>0
  4. and length(as_txn_code) = (select max(length(as_txn_code)) from wv_appli_societes where CHARINDEX(as_txn_code,'int.inf.too.sup.tva.221.rec')>0)


 
PS: t'as le droit d'aller boire quelques cafés pendant que ça tourne ;)


Message édité par Arjuna le 02-01-2006 à 18:07:39
Reply

Marsh Posté le 02-01-2006 à 18:07:07    

Merci.
Probleme c'est lenght n'existe pas sous sqlserver mais bon c'est pas grave c'est len mais len ne marche pas avec max(len(...)) .  
je m'y connais pas trop mais au niveau des octets c'est une piste possible?

Reply

Marsh Posté le 02-01-2006 à 18:08:07    

Ben moi ça marche avec SQL Server :??:
 
Ne me dit pas que t'as utilisé un type "TEXT" ou "NTEXT" quand même :o
 

Code :
  1. select max(len(description))
  2. from item


 
et si t'as utilisé un type "CHAR()" ou "NCHAR()" alors c'est len(trim())


Message édité par Arjuna le 02-01-2006 à 18:10:57
Reply

Marsh Posté le 02-01-2006 à 18:15:54    

Je viens de verifier sous la msdn et je vois pas cette synthaxe. :??:
c'est un champ de type nvarchar

Reply

Marsh Posté le 02-01-2006 à 18:29:34    

T'es un boss Arjuna  :sol:  
Tu avais raison la requete fonctionne il y avait 2-3 crasses à corriger et elle fonctionne ;)

Code :
  1. SELECT     as_txn_code
  2. FROM         vw_appli_societes
  3. WHERE     (LEN(as_txn_code) =
  4.                           (SELECT     MAX(LEN(as_txn_code)) AS Expr1
  5.                             FROM          vw_appli_societes
  6.                             WHERE      CHARINDEX(as_txn_code, 'inf.int.sup.too.tva.221.rec') > 0)) AND (CHARINDEX(as_txn_code, 'inf.int.sup.too.tva.221.rec') > 0)


 
Merci encore  [:negueu]

Reply

Marsh Posté le 02-01-2006 à 20:27:59    

C'est pas possible de récupérer la table en faisant un tri (par ordre décroissant) sur la longueur du champ :??:  
(et en se limitant au 1e enregistrement)
 
Au lieu de récupérer l'enregistrement le plus long, tu récupères le 1er, trié par longueur décroissante :D

Reply

Marsh Posté le 02-01-2006 à 20:27:59   

Reply

Marsh Posté le 02-01-2006 à 21:07:12    

non cela ne marche j'y ai pensé, cela pose probleme parce que normalement je dois récupérer plusieurs enregistrement de meme longueur.  
En gros tu pensais à ceci
SELECT LEN(mon_champ) FROM ma_table ORDER BY 1

Reply

Marsh Posté le 02-01-2006 à 21:23:11    

Je dirais plutôt :
SELECT champ FROM ma_table ORDER BY LEN(champ) DESC LIMIT 1
(avec la syntaxe adaptée au SGBD :whistle: )
 
Mais si tu veux pouvoir récupéré plusieurs champs ayant cette taille maximale, forcément, ca va pas.

Reply

Sujets relatifs:

Leave a Replay

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