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

Откуда: Норильск
Сообщений: 932
Всем доброго дня. Есть таблица, в ней одно поле, там через запятую забиты пункты, записи выглядят так:

Номера
А.1, Б.1.3, Б.1.4, Г.1.1
А.1, Б.1.3, Б.1.4, Г.1.1
А.1, Б.1.3, Б.1.4, Б.1.5, Б.1.7, Б.1.10, Б.8.1, Б.8.2, Б.8.3, Б.8.4, Д.1
А.1, Б.1.3, Б.1.4, Б.7.6, Б.8.20, Г.1.1, Г.2.1, Г.3.1, Г.3.2; Д.1, Д.2, Д.3


И так далее, пользователь например хочет выбрать все записи, содержащие пункты: Б.8.2, Б.8.4

Т.е. надо как-то сделать запрос, чтобы вставить эти пункты в условие:

select Номера from table1 where Номера like '% здесь должно быть условие выбора тех пунктов %'


Помогите максимально просто написать этот запрос. Заранее спасибо.
11 ноя 14, 12:30    [16827301]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Настенька
Помогите максимально просто написать этот запрос.

select Номера from table1 where Номера like '%Б.8.2%' and Номера like '%Б.8.4%'

Сообщение было отредактировано: 11 ноя 14, 12:33
11 ноя 14, 12:32    [16827313]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 932
А если он захочет выбрать например 10 пунктов, то будет 10 like. Я же тем более заранее не знаю, какие пункты он будет выбирать, это я для примера указала.
11 ноя 14, 12:34    [16827335]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Настенька
А если он захочет выбрать например 10 пунктов, то будет 10 like.

Вы же просили "максимально просто написать этот запрос"
В чем проблема сделать 10 лайков и 10 параметров ?
11 ноя 14, 12:36    [16827345]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 932
Ну под максимально просто я не так настолько просто имела ввиду. А другие варианты есть? Там просто может быть выбрано до 40 значений и не хочется городить 40 like.
11 ноя 14, 12:38    [16827359]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Настенька
А другие варианты есть?

Хранить данные надо по другому, чтобы были другие варианты.
11 ноя 14, 12:40    [16827367]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
зачем 40?
выделите условия в отдельную временную таблицу и свяжите с выборкой по прервому символу вашего значения
11 ноя 14, 12:40    [16827371]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
да и предварительно создайте номарльную таблицу из ваших номеров с уникальными значениями , а не через запятые в одном поле
11 ноя 14, 12:41    [16827380]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 932
автор
да и предварительно создайте номарльную таблицу из ваших номеров с уникальными значениями , а не через запятые в одном поле


Таблица уже создана и ее менять нельзя.

Ну и все-таки, есть другие варианты?

Про 40 like понятно :)
11 ноя 14, 12:43    [16827393]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Настенька
Ну и все-таки, есть другие варианты?

- Заносите все 40, 50, 100,... значений в таблицу, каждое значение в отдельную запись. Пишите join с like
11 ноя 14, 12:47    [16827404]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
кхе,
Guest
Настенька
Таблица уже создана и ее менять нельзя.
тогда, найдите автора этой "таблицы" и плюньте ему в морду, хотя бы !
11 ноя 14, 12:47    [16827406]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5489
SET NOCOUNT ON;

SELECT 1 _Key, N'А.1, Б.1.3, Б.1.4, Г.1.1' Номера
INTO #table1
UNION ALL SELECT 2, N'А.1, Б.1.3, Б.1.4, Г.1.1' Номера
UNION ALL SELECT 3, N'А.1, Б.1.3, Б.1.4, Б.1.5, Б.1.7, Б.1.10, Б.8.1, Б.8.2, Б.8.3, Б.8.4, Д.1'
UNION ALL SELECT 4, N'А.1, Б.1.3, Б.1.4, Б.7.6, Б.8.20, Г.1.1, Г.2.1, Г.3.1, Г.3.2; Д.1, Д.2, Д.3'

SELECT N'Б.1.3' Условие
INTO #query
--UNION ALL SELECT N'Б.1.10'
UNION ALL SELECT N'Г.1.1'

SELECT t._Key, t.Номера
FROM #table1 t
JOIN #query q ON t.Номера LIKE N'%' + q.Условие + N'%'
GROUP BY t._Key, t.Номера
HAVING COUNT(*) = (SELECT COUNT(*) FROM #query);

DROP TABLE #table1;
DROP TABLE #query;
GO


_KeyНомера
4А.1, Б.1.3, Б.1.4, Б.7.6, Б.8.20, Г.1.1, Г.2.1, Г.3.1, Г.3.2; Д.1, Д.2, Д.3
1А.1, Б.1.3, Б.1.4, Г.1.1
2А.1, Б.1.3, Б.1.4, Г.1.1
11 ноя 14, 13:37    [16827763]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Jaffar
Member

Откуда:
Сообщений: 633
а что никто не додумался предложить собрать динамический запрос?
11 ноя 14, 15:02    [16828612]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
Настенька
Помогите максимально просто написать этот запрос.

select Номера from table1 where Номера like '%Б.8.2%' and Номера like '%Б.8.4%'


Судя по всему, у ТС номера отсортированы, поэтому должно прокатить так

select Номера from table1 where Номера like '%Б.8.2%Б.8.4%'
11 ноя 14, 15:25    [16828843]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
a_voronin
Glory
пропущено...

select Номера from table1 where Номера like '%Б.8.2%' and Номера like '%Б.8.4%'


Судя по всему, у ТС номера отсортированы, поэтому должно прокатить так

select Номера from table1 where Номера like '%Б.8.2%Б.8.4%'


А точнее говоря, вот так

select Номера from table1 where ' ' + Номера + ',' like '% Б.8.2,% Б.8.4,%'
11 ноя 14, 15:26    [16828852]     Ответить | Цитировать Сообщить модератору
 Re: Разбить строку и сделать ей условие  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Настенька, задачка для полнотекстового поиска как раз.
11 ноя 14, 16:36    [16829500]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить