Упорядочить по String с пробелами между - PullRequest
0 голосов
/ 06 июля 2018

Моя таблица столбца "бизнес" выглядит так:

Michael Kors
Baltimore Michael Kors
Charlotte Michael Kors
Michael Texas
Kors Dallas
Michael Kors

Я должен применить заказ к этому столбцу в строке 'Michael Kors', поэтому отсортированный результат должен выглядеть примерно так:

Michael Kors
Michael Kors
Baltimore Michael Kors
Charlotte Michael Kors
Kors Dallas
Michael Texas

если строка содержит подстроку Michael Kors, она должна быть сверху в алфавитном порядке. Таким образом, в приведенном выше примере 2 строки с точным соответствием находятся сверху, а после этого Балтимор и Шарлотта занимают 3-е и 4-е места в алфавитном порядке. Не волнуйтесь о других строках, в которых нет точного слова Michael Kors

Я пытался использовать Substring_Index , но похоже, что он плохо работает с подстрокой с пробелами. Вся помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Вы можете перечислить логические выражения в своем предложении order by и применить нисходящий порядок, чтобы записи, для которых это выражение было истинным, были упорядочены перед теми, которые дают ложь. Затем укажите алфавитный порядок в конце, чтобы определить порядок, когда все другие выражения не различают две записи:

select   * 
from     mytable
order by (business = 'Michael Kors') desc,
         (business like '%Michael Kors%') desc,
         (business like '%Kors%') desc,
         (business like '%Michael%') desc,
         business
0 голосов
/ 06 июля 2018

Попробуйте это,

order by FIELD(business, 'Michael Kors’)
0 голосов
/ 06 июля 2018

Вы можете иметь несколько уровней упорядочения:

order by 
  locate('Michael Kors', business)=1 desc, 
  locate('Michael Kors', business)>0 desc, 
  business

Первый сортирует точные совпадения сверху, следующий уровень сортирует остальные совпадающие строки, а третий сортирует все остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...