Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.08.2018, 22:32
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
Привет всем. Есть база на UTF8, таблица с VARCHAR полем. Есть Microsoft Windows с поддержкой английского и русского языков. Как при сортировке строк внутри stored procedure получить точно тот же порядок, что получается при сортировке тех же строк через Windows API? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Результат сортировки SQL: abu abu- abu-k abu-m abu-n abuk abum abun Результат сортировки Windows: abu abu- abuk abu-k abum abu-m abun abu-n ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.08.2018, 22:37
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
Firebird 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.08.2018, 23:09
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
С collation поиграйся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.08.2018, 23:21
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
Я понимаю, что нужен какой-то collate, но даже не представляю какой. Связи с национальными языками нет. Потому и спрашиваю у специалистов и разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.08.2018, 23:48
|
|||
---|---|---|---|
Нужна помощь с сортировкой |
|||
#18+
FB2005Результат сортировки WindowsКак получены ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.08.2018, 23:56
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
FB2005, ну создать такой коллейт весьма проблематично. По крайней мере я не вижу параметров которые бы позвололяет игнорировать не буквенно-цифровые символы. Есть опция для учёта конечных пробелов, но это не то. Вот это на твоих данных даёт правильный результат Код: sql 1. 2. 3.
но думаю это не совсем то что надо, там ведь вместо дефиса могут и другие символы вылезти. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.08.2018, 00:07
|
|||
---|---|---|---|
Нужна помощь с сортировкой |
|||
#18+
hvladFB2005Результат сортировки WindowsКак получены ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.08.2018, 00:27
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
Симонов ДенисПо крайней мере я не вижу параметров которые бы позвололяет игнорировать не буквенно-цифровые символы. MULTI-LEVEL не оно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.08.2018, 09:03
|
|||
---|---|---|---|
Нужна помощь с сортировкой |
|||
#18+
FB2005Результат сортировки Windows: abu abu- abuk abu-k abum abu-m abun abu-n Странная сортировка. "-" идёт раньше любой буквы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.08.2018, 23:21
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
Сравнение строк в Windows происходит посредством вызова стандартной функции lstrcmp/lstrcmpi, которая в свою очередь вызывает CompareString, использующую текущую локаль потока. В документации по Windows API есть интересное замечание о сортировке: The lstrcmpi function uses a word sort, rather than a string sort. A word sort treats hyphens and apostrophes differently than it treats other symbols that are not alphanumeric, in order to ensure that words such as "coop" and "co-op" stay together within a sorted list. For a detailed discussion of word sorts and string sorts, see the Remarks section for the CompareString function. https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-lstrcmpw Там же ссылка на объяснение сортировки: Handling Sorting in Your Applications https://docs.microsoft.com/en-us/windows/desktop/Intl/handling-sorting-in-your-applications Возможно ли получить такой результат в Firebird? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2018, 01:23
|
|||
---|---|---|---|
Нужна помощь с сортировкой |
|||
#18+
FB2005, Вот тут http://demo.icu-project.org/icu-bin/collation.html можно попробовать разные опции коллейтов, реализованные в ICU. Похоже, требуемая сортировка достигается с alternate = non-ignorable. Но, насколько я понимаю, этот аттрибут (alternate) не поддерживается в CREATE COLLATION ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2018, 01:42
|
|||
---|---|---|---|
Нужна помощь с сортировкой |
|||
#18+
hvladПохоже, требуемая сортировка достигается с alternate = non-ignorable.shifted, конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2018, 13:38
|
|||
---|---|---|---|
|
|||
Нужна помощь с сортировкой |
|||
#18+
hvlad, Очень похоже, но в этом режиме не сортирует строки с апострофами. Почитал ICU User Guide Collation FAQ Q. How can collation rules mimic word sorting? A. This specific behavior can be mimicked using a tailoring that makes these characters completely ignorable. In this case, appropriate rule would be "& |