|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Вопрос похож по содержанию на вот этот: Как отсортировать элементы в строке по алфавиту с помощью раздела model язык oracle sql Задание абсолютно идентичное, с одной поправкой - раздел model и аналитические функции использовать нельзя, и добавляется порядок сортировки: В произвольной строке, состоящей из символьных элементов, разделенных запятыми, отсортировать элементы по алфавиту. При этом сначала идут строчные символы, затем прописные (очевидно и те и те в порядке алфавита), затем цифры по возрастанию, затем пробелы и пустые строки (пустые строки задаются просто двумя запятыми - abc,,asd,sd - пример строки с пустым элементом) Алфавит - латинский + все цифры и спецсимволы Пример результата: Input: abc,cde,ef,gh,mn,test,ss,df,fw,ewe,wwe Sorted string: abc,cde,df,ef,ewe,fw,gh,mn,ss,test,wwe Более сложный и содержательный пример: Input: ab7c,abc,9aH,9a7,8A,cDe,-a-,ef,9gh,mn,TEST,-*ss,TE(f,fw,ewe,, ,wwe Sorted string: abc,ab7c,cDe,ef,ewe,fw,mn,wwe,TEST,TE(f,8A,9aH,9a7,9gh,-a-,-*ss,, , По факту тут нужно посимвольно сравнивать элементы, и в зависимости от приоритета их сортировать. Загвоздка в том, что Oracle сортирует элементы в порядке - сначала спецсимволы, затем А а B b C c - затем цифры, конечно, это зависит от локали, но менять ее нельзя, возможно можно использовать NLSSORT, но я не нашел стандарта в котором он сортирует так как мне нужно. Вообще, так как это университетское задание - желательная реализация в основном опирающаяся на иерархические запросы и регулярные выражения - как сказано выше, аналитические функции использовать запрещено. Но интересно будет взглянуть на любые правильные решения. Вот пока до чего я дошел, на первый взгляд работает верно, то есть ряд нюансов: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Вроде работает, прошу поломать, так сказать )) Очень приветствуются другие решения (особенно в рамках правил) и советы, идеи как еще можно это реализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 16:07 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback Вроде работает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 16:28 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Elic, да, есть с этим определенные проблемы. Вообще изначально планировал собрать listaggом, но почему то при его использовании порядок записей нарушается. И вероятно это даже не "зачет" - а сразу можно прыгать в сапоги. Но на данный момент интересует именно сортировка, задача "собрать обратно" миллион раз уже описана на этом форуме и не только, так что думаю справлюсь поприличнее, когда припрет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 16:37 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback, listagg в новых версиях научилась сортировать ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 17:08 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Stax, А можно ли собрать записи listaggом без сортировки? То есть: select listagg(exprs) within group (order by ?) from table1 Чтобы порядок был такой же, как и в таблице/подзапросе из которого выбираются записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 17:20 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback При этом сначала идут строчные символы, затем прописные (очевидно и те и те в порядке алфавита), затем цифры по возрастанию, затем пробелы и пустые строки (пустые строки задаются просто двумя запятыми - abc,,asd,sd - пример строки с пустым элементом) Алфавит - латинский + все цифры и спецсимволы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 18:56 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Если аналитику использовать нельзя, то row_number можно получить с помощтю self join/scalar subquery. Или вообще можно захардкодить str1 и str2, но это не от большого ума. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 19:04 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback прошу поломать, так сказать Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 19:11 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Кобанчег Ничего не указано про приоритет спец символов. Если допустить что он выше чем у пробельных символов - всё равно непонятно почему в результате пробел идёт после пустого элемента. Да, неправильный пример привел, сейчас исправлю Приоритет спецсимволов относительно друг друга неважен, пробел в идеале должен идти после спецсимволов - затем пустые строки Спасибо за предложенное решение, сейчас буду сидеть разбираться )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 20:10 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback Приоритет спецсимволов относительно друг друга неважен Речь вообще шла не про приоритет спецсимволов относительно друг друга, а про их приоритет относительно пробельных симповлов. Dreadisback Спасибо за предложенное решение, сейчас буду сидеть разбираться )) Символы разбиваются на группы строчные/прописные/цифры/спец/пробельные и упорядочиваются с учетом приоритета группы (от 1 до 5) и в рамках группы учитывая исходный порядок. Потом в сортировке используется строка переведенная с учетом нового порядка. PS. Я так понимаю дебильные скобочки в конце предложения это признак молодого поколения. В дипломе тоже планируешь в таком стиле писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 21:43 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Кобанчег PS. Я так понимаю дебильные скобочки в конце предложения это признак молодого поколения. В дипломе тоже планируешь в таком стиле писать? Неспособность отличить дипломную работу от сообщения на форуме - это признак какого поколения? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 21:53 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Valergrad Неспособность отличить дипломную работу от сообщения на форуме - это признак какого поколения? Ты тоже ситаешь что скобочка это дружелюбная точка? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 23:49 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Кобанчег, премного благодарен, сейчас появилось время разобрать ваше решение - все именно так, как нужно, спасибо. Только сборку xml переделал listagом, но думаю разница невелика. Хороший прием смены порядка символов в сортировке с помощью translate, уже находил его где-то и поначалу так и хотел сделать, но из-за собственной интеллектуальной несостоятельности не смог сообразить как изменить порядок символов в таблице ASCII. А по поводу скобок в конце предложения - стилистика электронных переписок не стоит на месте, так что привыкайте, сударь, даже если такой формат вам нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 00:56 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback Только сборку xml переделал listagом, но думаю разница невелика. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 01:34 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Кобанчег, да, пока после listagg добил RPADом строку запятыми до длины входящей строки - вроде ни при каких тестовых значениях пока элементы не терялись. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:51 |
|
В произвольной строке, состоящей из символьных элементов, отсортировать записи
|
|||
---|---|---|---|
#18+
Dreadisback Stax, А можно ли собрать записи listaggом без сортировки? То есть: select listagg(exprs) within group (order by ?) from table1 Чтобы порядок был такой же, как и в таблице/подзапросе из которого выбираются записи? порядок ж в подзапросе как-то ж формируется имхо rownum будет достаточно Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 18:27 |
|
|
start [/forum/topic.php?fid=52&fpage=58&tid=1881754]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 416ms |
0 / 0 |