9
votes

Colonne de recherche dans la base de données SQL ignorant les caractères spéciaux

Quelqu'un peut-il savoir s'il est possible de faire un% comme% de recherche sur une colonne dans une base de données SQL Server, mais faites-le d'ignorer les caractères spéciaux de la colonne?

Donc, par exemple, si j'ai une colonne appelée "chansons" et ils contiennent les éléments suivants ...


noir ou blanc

Pas de sommeil 'jusqu'à Brooklyn

La chanson du navire

papa ne prêche pas


Si l'utilisateur cherche "Pas de Sleey Tue Brooklyn", j'aimerais que cela retourne une correspondance même s'ils ont oublié d'inclure l'Apostrophe. J'aimerais aussi qu'il retourne la 4ème rangée s'ils recherchent "âme". Je suis sûr que vous avez l'idée ....

Toute aide serait vraiment appréciée.


2 commentaires

Pourquoi voudriez-vous retourner la 4ème rangée s'ils recherchent "âme"?


Je ne suis pas sûr. J'ai écrit cela il y a 10 ans, peut-être que j'ai copié et collé la mauvaise liste? Peut-être que quelqu'un a édité la question?


4 Réponses :


0
votes

Utilisez une combinaison de Traduire, Tige et Trim . < / p>


3 commentaires

Je viens de faire une recherche de ces fonctions mais je ne trouve aucune information.


Les équivalents SQL Server sont supérieurs, ltrim, rtrim. Il n'y a pas de fonction de traduction mais vous pouvez utiliser plusieurs fonctions de remplacement pour chacun de vos caractères spéciaux.


Alors, puis-je utiliser un remplacement sur un nom de colonne, comme celui-ci ... Sélectionnez Artiste, Titre des chansons où artiste.replace ('#', ''). Remplacer ('*') Comme '% Mots-clés % ';



1
votes

Vous aurez différents caractères pour supprimer. Citations simples, citations doubles, traits d'union, points, virgules, etc.

Vous pouvez utiliser des expressions régulières dans votre clause où la clause et faire une correspondance sur la valeur propre. En savoir plus sur REGEX au sein de SQL ici .

Quant à l'art où vous souhaitez renvoyer la 4ème ligne de Soul .. Vous aurez besoin d'une structure de données pour étiqueter des chansons et vous devrez effectuer une recherche sur les balises pour le match. J'ai bien peur que nous aurons besoin de plus de détails sur votre structure de données pour cela.


1 commentaires

Je suis terrible à l'aide de Regex, mais peut être capable de trouver une regex en ligne qui supprime des caractères spéciaux. Merci



11
votes

Je regarderais à l'aide d'un index complet de texte, puis vous pouvez utiliser la puissance de FreeText et contient votre recherche.

Edit: Je regarderais toujours la recherche de l'index de texte intégral, cependant, à suivre D'une autre réponse, il s'agit d'une option utilisant Remplacer. P>

SELECT
    Artist,
    Title
FROM
    Songs
WHERE
    REPLACE(REPLACE(REPLACE(Artist, '#',''), '*', ''), '"', '') LIKE '%Keywords%'


3 commentaires

Dang, me bat à moi. Cela semble vraiment comme la voie à suivre, imo. En fait, je suis confronté à une situation similaire en ce moment et je suis sur le point de passer à la recherche de texte intégral.


Malheureusement, la raison pour laquelle j'appuie la possibilité d'écrire nos propres requêtes pour cela est que nous utilisons actuellement l'indexation de texte intégral et que le client n'aime pas cela, car ils disent que cela renvoie trop de résultats non pertinents!


@Jon, avez-vous regardé cela? msdn.microsoft.com/en-us/library/cc879245.aspx



0
votes

C'est une question ancienne mais je suis tombée sur elle et je travaille également avec des titres de la chanson et je veux développer la réponse acceptée qui utilise remplacer . Vous pouvez créer une liste des caractères que vous souhaitez ignorer et créer une fonction simple dans n'importe quelle langue pour générer le Quick'n'Dirty sans fin Remplacer les lignes . Par exemple, en Python: xxx

un appel tel que sanitize ("nom") retournera xxx

qui peut être utilisé dans votre requête. Vient d'écrire cela alors espérons que cela aide quelqu'un.


0 commentaires