2011-06-20 16 views
5

Mam tabelę, która ma pole tytułu książki. Chciałbym móc sortować rekordy jak to:Ignorowanie stopwords podczas sortowania rekordów SQL Server 2008

  1. Ancient Alligator
  2. cioci Annie Alligator
  3. A Complete Guide to aligatory
  4. prowincjonalny Aligatory
  5. Nie dotykać Alligator !
  6. wysiłku Alligator Hunt

i tak dalej, ignorując "a", "an", & "The", gdy pojawiają się one jako pierwsze słowo tytułu. (Można je również zignorować w dowolnym miejscu tytułu).

Wiem, że są to stopwords w SQL Server 2008, więc można je zignorować, jeśli ktoś użyje ich w wyszukiwaniu.

Ale czy istnieje sposób, aby je zignorować przez ZAMÓWIENIE? (Jeśli robi różnicę, zapytanie użyje LinqDataSource w ASP.NET.)

Dzięki!

Odpowiedz

1

Może coś takiego.

;with T(Title) as 
(
    select 'The Ancient Alligator'   union all 
    select 'Aunt Annie''s Alligator'  union all 
    select 'A Complete Guide to Alligators' union all 
    select 'Countrified Alligators'   union all 
    select 'Don''t Touch the Alligator!' union all 
    select 'An Effortless Alligator Hunt' 
) 

select Title 
from T 
order by replace(
     replace(
     replace(T.Title, 
     'A ', ''), 
     'An ', ''), 
     'The ', '') 

Wynik:

Title 
------------------------------ 
The Ancient Alligator 
Aunt Annie's Alligator 
A Complete Guide to Alligators 
Countrified Alligators 
Don't Touch the Alligator! 
An Effortless Alligator Hunt 
2

obliczeniowe klucza sortowania przy użyciu replace() nie będzie skalować jeśli masz dużą liczbę rekordów.

Najlepszym sposobem jest dodanie dodatkowego pola tabeli zawierającego tytuł z usuniętymi prefiksami A/An/etc i upewnienie się, że ma on indeks do przyspieszenia sortowania. Następnie możesz po prostu zamówić przez to nowe pole, ale wyświetlić oryginalne niezmienione pole.

Powiązane problemy