2011-06-20 10 views
5

ブックのタイトルフィールドを持つテーブルがあります。私はこのようなレコードをソートできるようにしたいと思います:SQL Server 2008レコードのソート中にストップワードを無視する

  1. 古代ワニの
  2. おばさんアニーのアリゲーター
  3. ワニ
  4. Countrifiedワニへの完全なガイド
  5. アリゲーターをタッチしないでください。 !
  6. アン楽アリゲーター・ハント

というように、「A」、「アン」を、無視して&「」彼らは、タイトルの最初の単語として表示されたとき。

これらはSQL Server 2008のストップワードであることを知っています。誰かが検索に使用すると無視されます。

しかし、ORDER BYで無視される方法はありますか? (違いがある場合、クエリはASP.NETでLinqDataSourceを使用します)。

ありがとう!

答えて

1

これはおそらくこのようなものです。

;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 ', '') 

結果:

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

は、多数のレコードを持っている場合は拡張しません()置き換える使用してソート・キーを計算します。

A/An/Theなどの接頭辞が削除されたタイトルを含む追加の表フィールドを追加し、並べ替えを高速化するインデックスがあることを確認するのが最も良い方法です。次に、この新しいフィールドで注文するだけで元の変更されていないフィールドを表示することができます。

関連する問題