powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос по sort
9 сообщений из 9, страница 1 из 1
Вопрос по sort
    #38524982
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Столкнулся со следующей проблемой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH x(t) AS (
    VALUES
     ('test0.ru')
    ,('test1.ru')
    ,('test10.ru')    
    ,('test16.ru')
    )
SELECT t
FROM   x
ORDER  BY t asc


получаю "test0.ru" "test10.ru" "test16.ru" "test1.ru"
, а ожидаю "test0.ru" "test1.ru" "test10.ru" "test16.ru"(под windows работает)
windows:
Код: sql
1.
show lc_collate; 


"Russian_Russia.1251"

debian:
"ru_RU.UTF-8"

Как сделать чтобы сортировка работала корректно, может кто сталкивался?
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525056
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH x(t) AS (
    VALUES
     ('test0.ru')
    ,('test1.ru')
    ,('test10.ru')    
    ,('test16.ru')
    )
SELECT t COLLATE "C"
FROM   x
ORDER  BY 1 asc


22.2. Collation Support
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525258
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat, в данном случае если добавить а, ё, я
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH x(t) AS (
    VALUES
     ('test0.ru')
    ,('test1.ru')
    ,('а') 
    ,('я') 
    ,('ё') 
    ,('test10.ru')    
    ,('test16.ru')
    )
SELECT t COLLATE "C"
FROM   x
ORDER  BY 1 asc


получим
"test0.ru" "test1.ru" "test10.ru" "test16.ru" "а" "я" "ё"
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525299
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Евтеев,
не ограничивайте себя.
добавьте test2 , и убедитесь, что вы решаете ненужную к постановке задачу.

верно сразу планировать такое использование:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH x(t) AS (
    VALUES
     ('test00.ru')
    ,('test01.ru')
    ,('а') 
    ,('я') 
    ,('ё') 
    ,('test10.ru')    
    ,('test16.ru')
    ,('test02.ru')
    )
SELECT t 
--COLLATE "C"
COLLATE "ru_RU"
FROM   x
ORDER  BY 1 asc



или, если оно досталось вам в наследство -- парсить это безобразие,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
WITH x(t) AS (
    VALUES
     ('test0.ru')
    ,('test1.ru')
    ,('а') 
    ,('я') 
    ,('ё') 
    ,('test10.ru')    
    ,('test16.ru')
    ,('test2.ru')
    )
SELECT t 
,(regexp_replace (t,'[0-9]','','ig'))
,NULLIF((regexp_replace (t,'[^0-9]','','ig')),'') ::int

FROM   x
ORDER  BY (regexp_replace (t,'[0-9]','','ig')) asc
,NULLIF((regexp_replace (t,'[^0-9]','','ig')),'')::int asc



можно конечно и более общий случай построить, но видимо не нужно.
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525365
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, парсить стороку как вы написали не совсем подходит, так как нужна сортировка не слово номер, а именно строки. Выше представленный набор данных просто выборка из теста где была обнаружена проблема.
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525372
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После создания локали:
Код: sql
1.
 sudo locale-gen ru_RU.CP1251


И создания базы с использованием данной локали
Код: sql
1.
2.
3.
4.
CREATE DATABASE dbname ENCODING 'win1251'
   lc_ctype='ru_RU.CP1251'
   lc_collate='ru_RU.CP1251'
  TEMPLATE template0;


Сортировка работать не стала аналогично windows
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525382
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Евтеев<>Выше представленный набор данных просто выборка из теста где была обнаружена проблема.
вам уже сказали:
добавьте в тест 'test2.ru' и закройте надуманную проблему как в винде, так и в линуксах.


PS где-то тут были топики про создание своих collate-ов. в т.ч. для достижения почти виндовой сортировки. От Ёш-а, кажется, года эдак 4 тому.
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525412
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Windows:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH x(t) AS (
    VALUES
     ('test12.ru')
    ,('test1.ru')
    ,('а') 
    ,('я') 
    ,('ё') 
    ,('test10.ru')    
    ,('test16.ru')
    ,('test3.ru')
    ,('test2.ru')
    ,('test22.ru')    
    )
SELECT t 
FROM   x
ORDER  BY 1 asc


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"test1.ru"
"test10.ru"
"test12.ru"
"test16.ru"
"test2.ru"
"test22.ru"
"test3.ru"
"а"
"ё"
"я"


Linux
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"test10.ru"
"test12.ru"
"test16.ru"
"test1.ru"
"test22.ru"
"test2.ru"
"test3.ru"
"а"
"ё"
"я"
...
Рейтинг: 0 / 0
Вопрос по sort
    #38525419
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Евтеев,
вот видите, 2 идёт после 16

хотя я, как старый виндусятник, понимаю ваше негодование
7491175

но вот попробуйте почитать вот тут:
8282246
может что-то придумается
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вопрос по sort
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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