2011-08-26 4 views
0

J'ai une colonne varchar avec 3 lignes:Phrase Rechercher dans SQL Server 2008 (T-SQL)

i eat orange, 
orange, 
oranges are nice 

Je veux SELECT requête pour renvoyer le résultat dans cet ordre:

orange, oranges are nice, i eat orange 

-à-dire ces correspondances qui commencent avec le 'keyword'=orange devraient précéder celles qui contiennent le mot-clé qui devrait précéder ceux qui se termine avec le mot-clé.

Comment puis-je faire cela en utilisant T-SQL? J'ai essayé d'utiliser le mot-clé LIKE mais aucun succès jusqu'à présent.

+1

lire sur les index de texte intégral. Vous pouvez le faire avec like (voir ci-dessous), mais ce n'est pas une bonne idée. –

Répondre

2
WHERE column LIKE '%' + keyword + '%' 
ORDER BY CASE WHEN column = keyword THEN 0 
       WHEN column LIKE keyword + '%' THEN 1 
       WHEN column LIKE '%' + keyword + '%' THEN 2 END 

Mais vraiment, pour ce type de recherche, vous voulez utiliser un index de texte intégral.

+0

J'aime votre solution, c'est un peu plus précis, mais je pense qu'il faut ajouter une condition supplémentaire (colonne LIKE '%' + mot clé THEN 3) pour que les chaînes se terminent avec le mot clé poussé vers l'arrière .. – Sparky

+0

@Sparky - la mienne ne fait que tripler (ou quatre) blocs. Le vôtre sera classé par ordre de première apparition. –

+0

Vrai, mais le mien ne fonctionnera pas si la dernière occurrence du mot-clé se produit dans une chaîne sensiblement plus courte qu'une autre chaîne correspondante. Peut-être que si nous combinons votre déclaration de cas, avec ma commande, nous pouvons obtenir quelque chose qui fonctionne (ou nous pouvons le convaincre d'utiliser l'indexation de texte intégral) – Sparky

2

Essayez l'ordre suivant par l'article (en supposant que votre clause WHERE retourne correspond uniquement)

ORDER BY charIndex(keyword,col_name),length(col_name) 

Cela mettra la première occurrence du mot-clé en premier.