|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
Собственно есть проблема с postgresql Есть таблица в которой поле является текстовым, в нем хранятся название домой и квартир и улиц. Собственно задача отсортировать правильно это все дело. На данный момент orderBy сортирует так 5 51 52 57 6 63 68 Хотелось бы что бы он сортировал последовательно. Усложняется все тем что в этом поле могут быть и слова и цифры. В Mysql помогало приобразование типов, что то типа (place_name+000) С Postgres такое не прокатит. Хотелось бы узнать, может есть какой то хак или костыль который бы позвоял правильно сортирова? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 14:26 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
ponikrfСобственно есть проблема с postgresql Есть таблица в которой поле является текстовым, в нем хранятся название домой и квартир и улиц. Собственно задача отсортировать правильно это все дело. На данный момент orderBy сортирует так 5 51 52 57 6 63 68 Хотелось бы что бы он сортировал последовательно. Усложняется все тем что в этом поле могут быть и слова и цифры. В Mysql помогало приобразование типов, что то типа (place_name+000) С Postgres такое не прокатит. Хотелось бы узнать, может есть какой то хак или костыль который бы позвоял правильно сортирова? какое "всё это дело", если у вас в поле хранятся названия улиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 14:43 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
Как я уже писал выше. Название домов квартир и улиц. На данный момент сделал сортировку на PHP с помощью функции natcasesort с алгоритмом Но я до сих пор надеюсь что это можно сделать средствами postgres хотя почитав так пока ничего интересного не нашел ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 15:27 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
ponikrf, Т.е. у вас храниться в поле набор из текстов и чисел без явной структуры, но вы хотите, чтобы оно сортировалось… как? По каким-то числам внутри строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 15:41 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
natural ordering вот что я хочу от postgres. Но как я понял postgres может это сделать только с расширением. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 16:08 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
можно попробовать решить как нибудь так (пока только мысли): нарезать на части по спецсимволам (например пробел, "/", "," ".") +добавить к каждой части вхождения номер по порядку например "Астрономическая 5/19" = "Астрономическая" - 1, "5" - 2, "19" - 3 "Академика Глушко 10" = "Академика" - 1, "Глушко" - 2, "10" - 3 потом сделать тройную сортировку: level, (если isnumeric(path) то path::numeric else null::numeric end), (если not isnumeric(path) то path else null::text end) тогда может есть шанс что будет так: Академика Глушка 10 Арбузова 15 Астрономическая 3 Астрономическая 5/2 Астрономическая 5/19 Астрономическая 5/20 Астрономическая 7 и тд ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 16:16 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
Legushkaможно попробовать решить как нибудь так (пока только мысли): нарезать на части по спецсимволам (например пробел, "/", "," ".") +добавить к каждой части вхождения номер по порядку например "Астрономическая 5/19" = "Астрономическая" - 1, "5" - 2, "19" - 3 "Академика Глушко 10" = "Академика" - 1, "Глушко" - 2, "10" - 3 потом сделать тройную сортировку: level, (если isnumeric(path) то path::numeric else null::numeric end), (если not isnumeric(path) то path else null::text end) тогда может есть шанс что будет так: Академика Глушка 10 Арбузова 15 Астрономическая 3 Астрономическая 5/2 Астрономическая 5/19 Астрономическая 5/20 Астрономическая 7 и тд ТС так и не привел примеров своих записей. А исходя из наших предположений, например так: Астрономическая 3 Астрономическая 5/2 Астрономическая д7/2 Астрономическая д7/ корп.2 Астрономическая д7, корп 2 ... и пошло-поехало, насколько хватит фантазии у операторов, вводивших данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 16:23 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
добавить стоп слова (д, дом, ул, улица итп (но может совпасть что например улица это реальное название улицы например "Широкая улица" но мы же это только для сортировки) да и к спец символам добавить еще "-" ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 16:29 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
еще было бы неплохо предварительно связку буква+цифра заменить на буква + пробел + цифра) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 16:33 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
а может по этому направлению пойти: тупо любое распознанное ЧИСЛО в тексте заменить на (1000000+ЧИСЛО)::text и сортануть по полученному выражению, длина символов числа будет фиксированной 1000005 1000051 1000052 1000057 1000006 1000063 1000068 и тогда в моем примере будет так: Академика Глушко 1000010 Арбузова 1000015 Астрономическая 1000003 Астрономическая 1000005/1000002 Астрономическая 1000005/1000019 Астрономическая 1000005/1000020 Астрономическая 1000007 + отдельно прикрутить логику вырезания всяких "д" "д." и тп ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 18:35 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
Ролг Хупиннасколько хватит фантазиичем больше фантазия операторов, тем менее целесообразно усложнять алгоритм. Для первочисельных строк достаточно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А далее можно додумывать адреса типа "10я линия 474го проезда 9го микрорайона имени 26 Бакинских комиссаров, корпус 815". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2017, 19:16 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
p2., тут скока не выдумывай -- жисть богачее и богачей надо пополнять табличку Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2017, 00:14 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
qwwq, откуда мораль -- не хватает обобщения скалярных операций и функций на массивы . просто для удобства. Код: plaintext
(а там и агрегаты массивов в смысле аппендов набегеют) но ?"главное" -- сетовых переменных нет, неудобно сетами пулятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2017, 00:26 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
нагуглился экстеншн https://pgxn.org/dist/pg_natural_sort_order/ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2017, 11:29 |
|
Сортировка строк как числа и строки
|
|||
---|---|---|---|
#18+
qwwqне хватает обобщения скалярных операций и функций на массивыДля одного array-аргумента на выражение хватает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
В более сложных выражениях не всегда можно обойтись однократным употреблением array-аргумента и без подзапросов уже не обойтись: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Еще бывает необходимость инкрементального применения операций - это уже через рекурсию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2017, 13:30 |
|
|
start [/forum/topic.php?fid=53&msg=39533520&tid=1996174]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 172ms |
0 / 0 |