[SQL]fonction de comparaison de chaines

fonction de comparaison de chaines [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 21-07-2005 à 11:00:00    

voila:
je voudrai comparer la valeur d'une chaine avec d'autre chaines et pour chaque comparaison affecter un coefficient de ressemblance.
qq at-il déja developpé qq chose de ce type???
merci

Reply

Marsh Posté le 21-07-2005 à 11:00:00   

Reply

Marsh Posté le 21-07-2005 à 11:02:21    

en SQL :??:

Reply

Marsh Posté le 21-07-2005 à 11:03:43    


 
ba oui, enfin ds un trigger ou en PLSQL
c possible non?

Reply

Marsh Posté le 21-07-2005 à 11:16:51    

quel sgbd ?
regarde les fonctionnalités d'indexation de texte intégrales (disponible au moins sous SQL Server, Oracle - avec package spévifique gratuit - et sous MySQL)

Reply

Marsh Posté le 21-07-2005 à 11:18:26    

Arjuna a écrit :

quel sgbd ?
regarde les fonctionnalités d'indexation de texte intégrales (disponible au moins sous SQL Server, Oracle - avec package spévifique gratuit - et sous MySQL)


 
c sous SQL server
je pense que dans une procedure c possible

Reply

Marsh Posté le 21-07-2005 à 12:18:21    

je te conseille de regarder la fonction CONTAINSTABLE plutôt que de galérer avec une PS qui va mettre 3 plombes à retrouver un résultat.

Reply

Marsh Posté le 21-07-2005 à 12:19:32    

Y'a juste que la pondération ne sera pas le nombre d'occurences trouvées, mais un truc un peu plus bizarre mettant en relation le nombre d'occurences du mot par rapport à la taille du texte du champ et d'autres éléments. Quoique tu peux peut-être retrouver le nombre d'occurences, c'est à creuser.

Reply

Marsh Posté le 21-07-2005 à 13:25:21    

Arjuna a écrit :

Y'a juste que la pondération ne sera pas le nombre d'occurences trouvées, mais un truc un peu plus bizarre mettant en relation le nombre d'occurences du mot par rapport à la taille du texte du champ et d'autres éléments. Quoique tu peux peut-être retrouver le nombre d'occurences, c'est à creuser.


en fait il sagit de comparer des numero de serie, ex: VF3ZCRMNB17310328
des fois il y a des erreurs de saisie donc que voudrait faire une fonction qui dit que quand 15 element du num sur 17 sont les meme alrs il sagit du meme numero
 
 

Reply

Marsh Posté le 21-07-2005 à 14:30:26    

CONTAINS est donc parfait pour toi !

Reply

Marsh Posté le 21-07-2005 à 15:59:28    

Arjuna a écrit :

CONTAINS est donc parfait pour toi !


 
merci
mais je n'est rien trouvé sur CONTAINS ds google!!!
t'as pas un exemple

Reply

Marsh Posté le 21-07-2005 à 15:59:28   

Reply

Marsh Posté le 21-07-2005 à 16:26:16    

Ben si t'as SQL Server, ouvre simplement l'aide en ligne, c'est dedans...
 

Citation :


 
 Référence de Transact-SQL  
 
 
CONTAINS
Prédicat utilisé pour effectuer une recherche dans des colonnes contenant des données de type caractère. Il peut s'agir de correspondances exactes ou floues (moins précises) de mots ou d'expressions, de mots à proximité les uns des autres, ou de correspondances pondérées. CONTAINS peut rechercher :  
 
un mot ou une phrase ;
 
 
le préfixe d'un mot ou d'une expression ;
 
 
un mot proche d'un autre mot ;
 
 
un mot dérivant d'un autre mot par inflexion (par exemple, le stemme « part » a généré par inflexion les formes dérivées partir, départ, partant ou partie) ;
 
 
un mot dont le poids spécifié est plus élevé que celui d'un autre mot.  
Syntaxe
CONTAINS
    ( { column | * } , '< contains_search_condition >'  
    )  
 
< contains_search_condition > ::=  
        { < simple_term >  
        | < prefix_term >  
        | < generation_term >  
        | < proximity_term >  
        | < weighted_term >  
        }  
        | { ( < contains_search_condition > )  
        { AND | AND NOT | OR } < contains_search_condition > [ ...n ]  
        }  
 
< simple_term > ::=  
    word | " phrase "
 
< prefix term > ::=  
    { "word * " | "phrase * " }
 
< generation_term > ::=  
    FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] )  
 
< proximity_term > ::=  
    { < simple_term > | < prefix_term > }  
    { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]  
 
< weighted_term > ::=  
    ISABOUT  
        ( { {  
                < simple_term >  
                | < prefix_term >  
                | < generation_term >  
                | < proximity_term >  
                }  
            [ WEIGHT ( weight_value ) ]  
            } [ ,...n ]  
        )  
 
Arguments
column
 
Nom de la colonne enregistrée pour la recherche de texte intégral. Une recherche de texte intégral peut être effectuée dans les colonnes contenant des données de type chaînes de caractère.
 
*
 
Spécifie que toutes les colonnes de la table sélectionnées pour une recherche de texte intégral doivent être utilisées pour les conditions spécifiées de recherche de contenu. Si la clause FROM comporte plusieurs tables, * doit être qualifié par le nom de la table.  
 
<contains_search_condition>
 
Spécifie le texte à rechercher dans la column. Les variables ne sont pas autorisées dans les conditions de recherche.
 
word
 
Chaîne de caractères sans espaces ni ponctuation.
 
phrase
 
Un ou plusieurs mots séparés par des espaces.  
 
 
 
Remarque  Certaines langues, notamment les langues asiatiques, peuvent contenir des expressions composées d'un ou de plusieurs mots non séparés par des espaces.
 
 
<simple_term>  
 
Spécifie un mot précis (un ou plusieurs caractères sans espaces ni ponctuation, dans les langages dont les caractères sont stockés sur un seul octet) ou une phrase (un ou plusieurs mots consécutifs séparés par des espaces et une ponctuation facultative, dans les langages dont les caractères sont stockés sur un seul octet). Exemples de termes simples autorisés : « lieu dit », « lieudit » et « Microsoft SQL Server ». Les phrases doivent être incluses entre des guillemets doubles ("" ). Les mots d'une phase doivent apparaître dans l'ordre spécifié dans <contains_search_condition>, tels qu'ils apparaissent dans la colonne de la base de données. La recherche de caractères dans un mot ou une expression ne distingue pas la casse. Dans des colonnes définies pour une indexation de texte intégral, les mots vides (par exemple, un, et ou le) ne sont pas stockés dans l'index de texte intégral. Lorsqu'un mot vide est utilisé dans la recherche d'un mot unique, SQL Server renvoie un message d'erreur indiquant que la requête contient uniquement des mots vides. SQL Server comprend une liste standard de mots vides dans le répertoire \Mssql\Ftdata\Sqlserver\Config.
 
La ponctuation est ignorée. Par conséquent CONTAINS(test, « panne d'ordinateur ») renverra la ligne ayant la valeur, « Où est mon ordinateur ? Il est en panne."
 
<prefix_term>
 
Précise une correspondance de mots ou de phrases commençant par le texte spécifié. Placez un terme préfixe entre guillemets doubles ("" ) et ajoutez un astérisque (*) avant les guillemets doubles fermants afin que tout le texte commençant par le terme simple spécifié avant l'astérisque soit pris en compte. La clause doit être définie de la manière suivante : CONTAINS (column, '"text*"') L'astérisque correspond à aucun, à un ou à plusieurs caractères (du ou des mots racine dans le mot ou la phrase). Si le texte et l'astérisque ne sont pas délimités par des guillemets doubles, comme dans CONTAINS (column, 'text*'), la recherche de texte intégral considère l'astérisque comme un caractère et recherche exactement les occurrences de text*.
 
Lorsque <terme_préfixe> est une phrase, chaque mot à l'intérieur de la phrase est considéré comme un préfixe séparé. Ainsi, une recherche spécifiant le préfixe "contrôle des mots *" trouvera les lignes contenant le texte « contrôle des mots clés », « contrôleur des mots », etc.
 
<generation_term>  
 
Précise une correspondance de mots lorsque les termes simples qui s'y trouvent contiennent des variantes du mot original à rechercher.  
 
INFLECTIONAL  
Spécifie que les formes plurielles et singulières, de même que le genre et les formes neutres des noms, les verbes et les adjectifs doivent être pris en compte. Les différents temps verbaux doivent également être pris en compte.  
Un <terme_simple> donné dans une <forme_canonique> ne peut correspondre à la fois aux noms et aux verbes.  
 
<proximity_term>
 
Spécifie une correspondance entre des mots ou des phrases qui doivent être voisins. L'argument <cooccurrent> opère de la même façon que l'opérateur AND : les deux requièrent qu'il y ait au moins deux mots ou deux phrases voisins dans la colonne où est effectuée la recherche. Plus les mots de <cooccurrent> sont proches, plus la correspondance est précise.  
 
NEAR | ~  
Indique que le mot ou l'expression placé à gauche de l'opérateur NEAR ou ~ doit être proche du mot ou de l'expression placé à droite de l'opérateur NEAR ou ~. Plusieurs cooccurrents peuvent être chaînés. Par exemple :  
a NEAR b NEAR c  
 
Ceci signifie que le mot ou la phrase a doit avoisiner le mot ou la phrase b et que ce dernier doit à son tour avoisiner le mot ou la phrase c.  
 
Microsoft® SQL Server™ évalue la distance entre le mot ou l'expression de gauche et de droite. Une valeur de classement très basse (par exemple, 0) indique une distance élevée entre les deux. Si les mots ou les expressions spécifiés sont très éloignés, la recherche est considérée comme exécutée, mais sa valeur de classement est très basse (0). Cependant, si <contains_search_condition> comporte seulement un ou plusieurs termes de proximité NEAR, SQL Server ne renvoie pas les lignes dont la valeur de classement est 0. Pour plus d'informations sur le classement, voir CONTAINSTABLE.  
 
<weighted_term>
 
Précise que les lignes renvoyées par la requête correspondent à une liste de mots ou d'expressions auxquels une valeur de pondération peut être affectée.  
 
ISABOUT  
Précise le mot clé <weighted_term>.
 
WEIGHT (valeur_de_pondération)  
Définit une valeur de pondération qui est un nombre compris entre 0,0 et 1,0. Chaque élément de <weighted_term> peut inclure une valeur de pondération. L'argument weight_value permet de modifier la façon dont plusieurs parties d'une requête affectent la valeur de classement affectée à chaque ligne correspondant à la requête. La pondération impose un calcul différent de la valeur de classement parce que tous les éléments de <terme_pondéré> sont utilisés conjointement pour déterminer la correspondance. Une ligne est renvoyée lorsqu'il y a une correspondance avec l'un des paramètres ISABOUT, qu'une valeur de poids soit affectée ou non. Pour déterminer les valeurs de classement pour chacune des lignes renvoyées indiquant le degré de correspondance entre ces lignes, voir CONTAINSTABLE.  
AND | AND NOT | OR
 
Spécifie une opération logique entre deux conditions de recherche de contenu. Lorsque <condition_de_recherche_de_contenu> comporte des groupes placés entre parenthèses ; ces groupes sont évalués en premier. Une fois ces groupes évalués, les règles suivantes sont appliquées lorsque ces opérateurs logiques sont utilisés dans les conditions de recherche de contenu :  
 
NOT est appliqué avant AND ;
 
 
NOT peut uniquement être utilisé après AND, comme dans AND NOT. L'opérateur OR NOT n'est pas autorisé. NOT ne peut pas être spécifié avant le premier terme (par exemple, CONTAINS(mycolumn, 'NOT "phrase_to_search_for"').
 
 
AND est appliqué avant OR ;
 
 
les opérateurs booléens de même type (AND, OR) sont associatifs et peuvent, par conséquent, être utilisés dans n'importe quel ordre.  
n
 
Espace réservé indiquant que plusieurs conditions de recherche CONTAINS peuvent être spécifiées, de même que plusieurs termes dans celles-ci.
 
Notes
CONTAINS n'est pas reconnu en tant que mot clé si le niveau de compatibilité est inférieur à 70. Pour plus d'informations, voir sp_dbcmptlevel.  
 
Exemple
A. Utilisation de CONTAINS avec <terme_simple>
L'exemple suivant recherche tous les produits contenant le mot « bottles » et coûtant 15,00 $.
 
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE UnitPrice = 15.00
   AND CONTAINS(QuantityPerUnit, 'bottles')
GO
 
B. Utilisation de CONTAINS et d'une phrase dans <terme_simple>
L'exemple suivant renvoie tous les produits contenant la phrase « sasquatch ale » ou « steeleye stout ».
 
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "sasquatch ale" OR "steeleye stout" ')
GO
 
C. Utilisation de CONTAINS avec <terme_préfixe>
L'exemple suivant renvoie tous les noms de produits comportant au moins un mot commençant par le préfixe « choc » dans la colonne ProductName.
 
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "choc*" ')
GO
 
D. Utilisation de CONTAINS et OR avec <terme_préfixe>
L'exemple suivant renvoie toutes les descriptions de catégorie contenant les chaînes « sea » ou « bread ».
 
USE Northwind
SELECT CategoryName
FROM Categories
WHERE CONTAINS(Description, '"sea*" OR "bread*"')
GO
 
E. Utilisation de CONTAINS avec <cooccurrent>
L'exemple suivant renvoie tous les noms de produits contenant le mot « Boysenberry » à proximité du mot « spread ».
 
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')
GO
 
F. Utilisation de CONTAINS avec <forme_canonique>
L'exemple suivant recherche tous les produits comportant des formes dérivés du mot « dry » : dried, drying, etc.
 
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')
GO
 
G. Utilisation de CONTAINS avec <terme_pondéré>
L'exemple suivant recherche tous les noms de produits contenant les mots « spread », « sauces » ou « relishes ». Un poids différent est affecté à chacun des mots.
 
USE Northwind
GO
SELECT CategoryName, Description
FROM Categories
WHERE CONTAINS(Description, 'ISABOUT (spread weight (.8),  
   sauces weight (.4), relishes weight (.2) )' )
GO
 
H. Utilisation de CONTAINS avec des variables
L'exemple suivant utilise une variable à la place d'un terme de recherche spécifique.
 
USE pubs
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='Moon'
SELECT pr_info FROM pub_info WHERE CONTAINS(pr_info, @SearchWord)
 
 
Voir aussi
 
FREETEXT
 
FREETEXTTABLE
 
Utilisation du prédicat CONTAINS
 
WHERE
 
©1988-2000 Microsoft Corporation. Tous droits réservés.

Reply

Marsh Posté le 21-07-2005 à 16:28:00    

N'oublie pas aussi CONTAINSTABLE

Reply

Marsh Posté le 21-07-2005 à 16:28:48    

encore une fois: MERCI :jap:

Reply

Marsh Posté le 21-07-2005 à 16:30:26    

t'aurais pas lu l'autre topic pas hasard ? :whistle:

Reply

Marsh Posté le 21-07-2005 à 16:37:14    

euh...non

Reply

Marsh Posté le 21-07-2005 à 18:51:20    

ah, j'aurais cru :D (ps: oublie ce que je viens de dire, c'est sans intérêt, c'est juste une private joke pour moi :D)

Reply

Sujets relatifs:

Leave a Replay

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