powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравниваются строки при сортировке?
7 сообщений из 7, страница 1 из 1
Как сравниваются строки при сортировке?
    #38813797
amiksim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
Столкнулся с непонятной ситуацией при сортировке строк.
Пример:
Код: sql
1.
select * from (select 'asd_2' union select 'asd_' union select 'asd.1') a order by 1 asc;


у меня результат такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
?column?
----------
 asd_
 asd.1
 asd_2
(3 rows)
вместо ожидаемого:
Код: plaintext
1.
2.
3.
4.
5.
6.
?column?
----------
 asd_
 asd_2
 asd.1
(3 rows)
Такое ощущение, что игнорируются все символы, кроме букв и чисел.
В чем может быть причина такого поведения?
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813822
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
amiksim, почему ожидается . после _ ?
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813825
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amiksim,

сортировка идет в соответствии с правилами заданными используемым collation
которые зависят от операционной системы и своей внутренней логики.

Используемый в базе collation видет по выводу \l+ в psql.

Например en_US.utf8 обычно вообще при сортировке игнорирует не цифро-алфавитные символы.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813826
amiksim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&N, действительно, ошибся. должно быть так:
Код: plaintext
1.
2.
3.
asd.1
asd_ 
asd_2
но строки с подчеркивание должны идти подряд. Вместо подчеркивания использовал другие знаки (+, -, #) - все то же самое.
тестировал на 9.4 beta2 и 9.4 beta3.
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813827
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813828
amiksim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
да, используется как раз en_US.utf8.
Можно как-нибудь поменять такое поведение, т.к. в строках встречаются не только цифры и буквы?
...
Рейтинг: 0 / 0
Как сравниваются строки при сортировке?
    #38813835
amiksim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukнапример почитайте
https://www.gnu.org/software/coreutils/faq/#Sort-does-not-sort-in-normal-order_0021

Спасибо!
если просто настроить локаль как export LC_ALL=C, то эффекта нет.
а вот если в самом запросе указать collate, то отрабатывает правильно:
Код: sql
1.
select * from (select 'asd_2' as b union select 'asd_' union select 'asd.1') a order by a.b collate "C";
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравниваются строки при сортировке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]