Connaitre l'enregistrement le plus long [Trouvé] - SQL/NoSQL - Programmation
Marsh Posté le 02-01-2006 à 17:41:10
Arjuna a écrit : j'ai rien compris |
Bon ok je vais tenter de reformuler
Dans cette requete :
Code :
|
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.
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 )
Marsh Posté le 02-01-2006 à 17:54:39
soit :
Code :
|
PS: t'as le droit d'aller boire quelques cafés pendant que ça tourne
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?
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
Code :
|
et si t'as utilisé un type "CHAR()" ou "NCHAR()" alors c'est len(trim())
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
Marsh Posté le 02-01-2006 à 18:29:34
T'es un boss Arjuna
Tu avais raison la requete fonctionne il y avait 2-3 crasses à corriger et elle fonctionne
Code :
|
Merci encore
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
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
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 )
Mais si tu veux pouvoir récupéré plusieurs champs ayant cette taille maximale, forcément, ca va pas.
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 :
Pourtant ces enregistrements sont bonnes mais je ne le veut pas.
Comment puis je trouver mon resultat ?
Merci et bonne année
Message édité par Berceker United le 02-01-2006 à 18:28:19