Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 упорядочить выборку из таблицы используя Like  [new]
dim---76
Member

Откуда:
Сообщений: 69
требуется выбрать список улиц из таблицы по подстроке например:
Select * from street where name like '%лени%'

выбирается нормально но упорядочивание мне надо что бы сначала шло Ленина (то есть те названия которые начинаются на "лени"), а потом те где есть "лени" (1переулок ленина и т.д.)

попробовал объединить
Select 0 as xx,* from street where name like 'лени%'
union(
Select 1 as xx,* from street where name like '%лени%'
)
order by xx,name

делает, но тогда Ленина попадает дважды, запись идет первой и вторая где то в общем списке

может кто то посоветует как можно решить задачу?
19 фев 16, 10:38    [18839497]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
Glory
Member

Откуда:
Сообщений: 104751
Select *, case when name like 'лени%' then 0  when name like '%лени%' then 1 end as xx from street where name like '%лени%'
19 фев 16, 10:41    [18839520]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
SELECT xx=0,* FROM street WHERE [name] LIKE 'лени%' COLLATE Cyrillic_General_CI_AI
UNION ALL
SELECT 1 FROM street WHERE [name] LIKE '%_лени%' COLLATE Cyrillic_General_CI_AI
ORDER BY xx,[name] COLLATE Cyrillic_General_CI_AI;
19 фев 16, 10:45    [18839542]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
iap
SELECT xx=0,* FROM street WHERE [name] LIKE 'лени%' COLLATE Cyrillic_General_CI_AI
UNION ALL
SELECT 1 FROM street WHERE [name] LIKE '%_лени%' COLLATE Cyrillic_General_CI_AI
ORDER BY xx,[name] COLLATE Cyrillic_General_CI_AI;
Наверно, точнее так:
SELECT xx=0,* FROM street WHERE [name] LIKE 'лени%' COLLATE Cyrillic_General_CI_AI
UNION ALL
SELECT 1 FROM street WHERE [name] LIKE '%[^ ]лени%' COLLATE Cyrillic_General_CI_AI
ORDER BY xx,[name] COLLATE Cyrillic_General_CI_AI;
19 фев 16, 10:46    [18839550]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21502
А почему не что-нить вроде
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY ([name] LIKE 'лени%'), [name]

?
19 фев 16, 10:59    [18839616]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Akina
А почему не что-нить вроде
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY ([name] LIKE 'лени%'), [name]

?

а где такое можно??
в крайнем случае

SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY (
 CASE 
      WHEN [name] LIKE 'лени%' 
      THEN 0 
      ELSE 1 
END)
19 фев 16, 11:22    [18839753]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21502
TaPaK
а где такое можно??

Это была идея, которую ты довёл до рабочего кода в ЭТОМ диалекте.
А именно так можно, например, в MySQL.

Есть и ещё один вариант:
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY CHARINDEX('лени',[name]), [name]

Сортировка немного иная, но тоже со смыслом.
19 фев 16, 11:47    [18839978]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
dim---76
Member

Откуда:
Сообщений: 69
Спасибо, мне понравился вариант
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY (
 CASE 
      WHEN [name] LIKE 'лени%' 
      THEN 0 
      ELSE 1 
END)
19 фев 16, 16:11    [18841978]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
Speshuric
Member

Откуда: г. Москва
Сообщений: 129
Akina
TaPaK
а где такое можно??

Это была идея, которую ты довёл до рабочего кода в ЭТОМ диалекте.
А именно так можно, например, в MySQL.

Есть и ещё один вариант:
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY CHARINDEX('лени',[name]), [name]

Сортировка немного иная, но тоже со смыслом.


Тогда уж
SELECT *
FROM street 
WHERE [name] LIKE '%лени%'
ORDER BY PATINDEX('%лени%',[name]), [name]

так будет маска одинаковая
19 фев 16, 18:11    [18842688]     Ответить | Цитировать Сообщить модератору
 Re: упорядочить выборку из таблицы используя Like  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21502
А смысл?
19 фев 16, 23:09    [18843695]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить