Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
имеется Table1 c 1 столбцом Col1 col1 --- abc d14 p25 qsd f458 45d fff ggg В строковой переменной задается порядок сортировки d14,45d,f458,abc,p25 как можно результат Select * from table1 отсортировать согласно порядку в строковой переменной? |
11 сен 15, 10:44 [18136424] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
- Превращаете строковую пременную в вспомогательную таблицу с номерами - связываете основную таблицу сос вспомогательной - сортируете |
||
11 сен 15, 10:52 [18136483] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
AVRob, order by PATINDEX (col1, <строковая переменныя с порядком сортировки> ) |
11 сен 15, 11:00 [18136545] Ответить | Цитировать Сообщить модератору |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
Glory, А как из строки сделать таблицу с номерами? |
11 сен 15, 11:08 [18136581] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Хотя бы вот так, а то можно нарваться order by PATINDEX (','+col1+',', ','+<строковая переменныя с порядком сортировки>+',' ) |
||
11 сен 15, 11:08 [18136583] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
не учитывает ситуацию, если есть подобне значения: 'abc', 'abcd', 'abcde' |
||
11 сен 15, 11:09 [18136585] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
a_voronin был быстрее :-) |
||||
11 сен 15, 11:09 [18136588] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Например так: DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25'; DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>'; DECLARE @xml XML = CAST(@xml_text AS XML); SELECT item_value = item.value('.', 'NVARCHAR(MAX)'), item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A)) FROM @xml.nodes('/I') XMLDATA(item); |
||
11 сен 15, 11:10 [18136591] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Добрый Э - Эх, не хватает исползования разделителей. ORDER BY CHARINDEX(','+col1+',',','+@OrderBy+',') |
11 сен 15, 11:11 [18136596] Ответить | Цитировать Сообщить модератору |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
Добрый Э - Эх, patindex у меня возвращает только 0. Вместо Patindex я попробовал Charindex. Работает нормально, однако, когда длина строковой переменной превышает 4000 то и Charindex возвращает 0 для данных за 4000-ым символом. |
11 сен 15, 11:13 [18136612] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Это упрощенный вариант вот этого: MSSQL - Convert list to table #2 (array of string items) |
||||
11 сен 15, 11:14 [18136620] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
AVRob, тогда 18136483 |
11 сен 15, 11:14 [18136622] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Какого типа у вас строковая переменная? Предположу, что НЕ VARCHAR(MAX) |
||
11 сен 15, 11:16 [18136634] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
А если ему сделать CAST(col, NVARCHAR(MAX)) ? |
||
11 сен 15, 11:17 [18136644] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
11 сен 15, 11:18 [18136650] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Yuri Abele, да все проще. expressionToFind Is a character expression that contains the sequence to be found. expressionToFind is limited to 8000 characters. У старинных функций многие параметры имеют такое ограничение. https://msdn.microsoft.com/en-us/library/ms186323.aspx |
11 сен 15, 11:18 [18136653] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Беееееееееее........... Тогда лучше PATINDEX - у него нет такого ограничения |
||
11 сен 15, 11:21 [18136681] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
![]() https://msdn.microsoft.com/ru-ru/library/ms188395(v=sql.120).aspx |
||||
11 сен 15, 11:22 [18136691] Ответить | Цитировать Сообщить модератору |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
нас интересует expressionToSearch. Charindex возвращает 0 когда длина expressionToSearch Ю 4000 и искомая строка находится за 4000-ым символом. Длина expressionToFind у нас не превышает 10. |
||
11 сен 15, 11:24 [18136709] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Читаем внимательнее - ограничение только у параметра ЧТО ищем. Ограничения на ГДЕ ищем нет |
||||
11 сен 15, 11:24 [18136710] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Функция, которая делит строку на слова |
11 сен 15, 11:24 [18136717] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Вау! Строковый массив с элементами длиннее, чем 4000 символов?!?! Это что за задача такая? В таком случае то, что Glory вначале посоветовал - с преобразованием строки в таблицу. КАК - я пример скрипта привел |
||||
11 сен 15, 11:26 [18136726] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
11 сен 15, 11:27 [18136738] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Если нужно отбрасывать пустые элементы и просчитывать RANKing повторяющихся элементов - идем по приведенной мною ссылке |
||||
11 сен 15, 11:28 [18136743] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Блин, так в чем тогда проблема? PATINDEX: ORDER BY PATINDEX(N',' + col1 + N',', N',' + @OrderBy + N',') Где @OrderBy NVARCHAR(MAX) |
||
11 сен 15, 11:32 [18136779] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |