2011-06-20 10 views
5

Tengo una tabla que tiene un campo de título del libro. Me gustaría ser capaz de ordenar los registros de esta manera:Ignorando las palabras vacías al ordenar los registros de SQL Server 2008

  1. El antiguo cocodrilo
  2. cocodrilo de la tía Annie
  3. Una guía completa a los cocodrilos
  4. Countrified caimanes
  5. no toque el cocodrilo !
  6. Un esfuerzo cocodrilo caza

y así sucesivamente, haciendo caso omiso de "A", "una", & "La" cuando aparecen como la primera palabra del título. (También podrían ignorarse en cualquier parte del título.)

Sé que estas son palabras prohibidas en SQL Server 2008, por lo que pueden ignorarse si alguien las utiliza en una búsqueda.

¿Pero existe alguna forma de hacer que los ignore ORDER BY? (Si hace una diferencia, la consulta utilizará un LinqDataSource en ASP.NET.)

¡Gracias!

Respuesta

1

Algo como esto quizás.

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

Resultado:

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

Cálculo de una clave de ordenación mediante el uso de replace() no se escala si tiene un gran número de registros.

La mejor manera es agregar un campo de tabla adicional que contenga el título con los prefijos A/An/The etc. eliminados y asegúrese de que tenga un índice para acelerar la clasificación. Entonces puede simplemente ordenar por este nuevo campo pero mostrar el campo original sin cambios.

Cuestiones relacionadas