2011-06-20 17 views
5

Kitap başlık alanına sahip bir tablom var. Böyle kayıtları sıralamak mümkün istiyorum:SQL Server 2008 kayıtlarını sıralarken durdurma engelleniyor

  1. The Ancient Timsah
  2. Teyze Annie'nin Timsah
  3. timsahlar
  4. Countrified Alligators A Complete Guide
  5. Alligator Dokunma !
  6. zahmetsiz timsah Hunt

ve böylece, "A", "an", göz ardı & "" bunlar başlığın ilk kelime olarak çıkmışlardır. (Başlıkta herhangi bir yerde göz ardı edilebilirler.)

Bunların SQL Server 2008'deki şifreler olduğunu biliyorum, bu yüzden birileri bunları aramada kullanırsa göz ardı edilebilir.

Ancak, ORDER BY tarafından yok sayılmasını sağlamanın bir yolu var mı? (Bir fark yaratırsa, sorgu ASP.NET'te bir LinqDataSource kullanır.)

Teşekkürler!

cevap

1

Bunun gibi bir şey.

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

Sonuç:

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

Eğer bir kayıt sayısı çoksa, ölçek olmaz() yerine kullanarak bir tür anahtar hesaplanması.

En iyi yol, A/An/gibi önekleri içeren başlığı içeren ek bir tablo alanı eklemek ve sıralamayı hızlandırmak için bir dizin olduğundan emin olmaktır. Daha sonra bu yeni alana göre sipariş verebilir, ancak orijinal değişmeyen alanı görüntüleyebilirsiniz.