5

本のタイトル フィールドを持つテーブルがあります。次のようにレコードをソートできるようにしたいと思います。

  1. 古代のワニ
  2. アニーおばさんのワニ
  3. ワニの完全ガイド
  4. 国産ワニ
  5. ワニに触るな!
  6. 楽なワニ狩り

など、タイトルの最初の単語として表示される "A"、"An"、および "The" は無視されます。(タイトルのどこでも無視できます。)

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

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

ありがとう!

4

2 に答える 2

2

多数のレコードがある場合、replace() を使用してソート キーを計算してもスケーリングされません。

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

于 2011-07-26T02:42:03.660 に答える
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
于 2011-06-21T05:38:57.277 に答える