Получить записи в алфавитном порядке, начиная с определенной буквы в Sql Server - PullRequest
4 голосов
/ 02 апреля 2009

В SQLSERVER / MSSQL есть проблема:

SELECT * from [Translation Color] order by [Language Code] 

Я хочу, чтобы записи располагались в алфавитном порядке, начиная с буквы «I».

Пример результата:

'Ioren' 'Iumen' «Пирог» 'Arfen' 'Coldry'

Я не хочу использовать операторы union или sql ... просто попробуйте поймать его с помощью специального предложения.

Я пробовал с:

ORDER BY <field> REGEXP '^I' DESC

но это не сработало.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2009

Это должно сделать это:

ORDER BY CASE WHEN SUBSTRING([Translation Color],1,1) = 'l' 
     THEN 1 ELSE 0 END DESC

EDIT:

Полный ответ для заказа полностью начиная с i, затем возвращаясь к h:: 1006 *

ORDER BY CASE WHEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) < 73 
         THEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) + 26
         ELSE ASCII(UPPER(SUBSTRING([Translation Color],1,1))) END ASC,       
         [Translation Color] ASC

Обратите внимание, что это повлияет на производительность на больших столах.

2 голосов
/ 02 апреля 2009

Или это хорошо:

select [Translation Color], 
  case when [Translation Color] < 'l' then 1
                     else 0 
                     end as Priority
from t1 
order by Priority, [Translation Color]

Это упорядочит в алфавитном порядке, начиная с 'l'

Редактировать Это решение, кажется, работает для меня:

create table t1 ( c1 varchar(20) collate SQL_Latin1_General_Cp437_CI_AS)

затем я заполнил некоторые тестовые данные, затем запустил это:

select c1 
from t1 
order by case when c1 >= 'l' then 0 else 1 end, c1
1 голос
/ 02 апреля 2009
SELECT *
FROM [Translation Color]
ORDER BY
    CASE WHEN [Language Code] LIKE '[I-Zi-z]%' THEN 0 ELSE 1 END,
    [Language Code]
...