powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка character varying
26 сообщений из 26, показаны все 2 страниц
Сортировка character varying
    #34591392
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует таблица в одной из ее колонок (house_number) хранятся номера домов тип: character varying(255).

При сортировке по возрастанию результат следующий:

19
2
20
26
49
5

Подскажите пожалуйста как мне отсортировать данную колонку правильно.
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591404
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenСуществует таблица в одной из ее колонок (house_number) хранятся номера домов тип: character varying(255).

При сортировке по возрастанию результат следующий:

19
2
20
26
49
5

Подскажите пожалуйста как мне отсортировать данную колонку правильно.

А разве ПГ ее не правильно отсортировал?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591418
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно по порядку:

2
5
19
20
26
49
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591423
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenМне нужно по порядку:

2
5
19
20
26
49

Тип character varying(255) - это зачем?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591442
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msa@n-e.ru RaverenМне нужно по порядку:

2
5
19
20
26
49

Тип character varying(255) - это зачем?Ну, видимо, номер дома может быть и 2а, например. Вот как в таком случае автор хочет сортировать...
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591452
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamir msa@n-e.ru RaverenМне нужно по порядку:

2
5
19
20
26
49

Тип character varying(255) - это зачем?Ну, видимо, номер дома может быть и 2а, например. Вот как в таком случае автор хочет сортировать...

Видимо хочет

2
2a
5
19
20
26
49
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591476
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Автор еще хочет чтобы так:

2
2a
2/8
5
19
19/16
19б
20
26
27б
49
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591483
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamir msa@n-e.ru RaverenМне нужно по порядку:

2
5
19
20
26
49

Тип character varying(255) - это зачем?Ну, видимо, номер дома может быть и 2а, например. Вот как в таком случае автор хочет сортировать...

Вероятней всего номер дома должен быть - int4, а дробь дома - другое поле character varying(255)
тогда все нормально отсортируется
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table t1 (
r1 int4,
r2 character varying( 255 )
);
insert into t1 values ( 2 ,'');
insert into t1 values ( 2 ,'a');
insert into t1 values ( 5 ,'');
insert into t1 values ( 20 ,'');
insert into t1 values ( 26 ,'');
insert into t1 values ( 49 ,'');
select r1||r2 from t1 order by r1,r2;
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591503
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю что integer нормально сортируется, но дело в том, что данные я беру не из своей таблицы и мне нужно именно то что я написал выше.
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591529
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenЯ понимаю что integer нормально сортируется, но дело в том, что данные я беру не из своей таблицы и мне нужно именно то что я написал выше.

Используйте, например, регулярное выражения для выделения именно номера дома из всего поля и сортируйте по этой части, приведя ее к int4
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591623
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно пример?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591631
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenМожно пример?

Можно.

Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table t2 (
r2 character varying( 255 )
);
insert into t2 values ('2');
insert into t2 values ('2a');
insert into t2 values ('5');
insert into t2 values ('20');
insert into t2 values ('26');
insert into t2 values ('49');
insert into t2 values ('2/8');
select * from t2 order by substring(r2 from '^\\d*')::int4
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591754
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Вам большое!
Смею предположить, что данное регулярное выражение будет вызывать ошибку, если в одном из полей таблицы будет пусто. Можно ли как-нибудь подругому?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591895
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenСпасибо Вам большое!
Смею предположить, что данное регулярное выражение будет вызывать ошибку, если в одном из полей таблицы будет пусто. Можно ли как-нибудь подругому?

Ошибка будет в том случае, если substring(r2 from '^\\d*') вернет null. В этом случае используйте оператор CASE
...
Рейтинг: 0 / 0
Сортировка character varying
    #34591937
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenСпасибо Вам большое!
Смею предположить, что данное регулярное выражение будет вызывать ошибку, если в одном из полей таблицы будет пусто. Можно ли как-нибудь подругому?

Точнее ошибка будет если substring(r2 from '^\\d*') вернет пустую строку или строку, где содержатся не только цифры
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592011
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так не получается:
Код: plaintext
select * from t2 order by case when substring(r2 from '^\\d*')::int4 = null then  0  end 
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592090
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RaverenТак не получается:
Код: plaintext
select * from t2 order by case when substring(r2 from '^\\d*')::int4 = null then  0  end 


Так и не получится! Вы безусловно приводите результат функции к int4, а нужно в зависимости от того, что она вернула

Код: plaintext
1.
select * from t2 order by case when substring(r2 from '^\\d*')='' then  1  else substring(r2 from '^\\d*')::int4 end
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592234
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо!
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592344
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что автора топика не интересует скорость работы этого запроса?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592455
Raveren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну почему же не интересует? Интересует. А разве есть ещё варианты побыстрей?
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592587
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaverenНу почему же не интересует? Интересует. А разве есть ещё варианты побыстрей?
если я правильно понимаю - проблема у вас рекурсивная
т.е
13/12
должно итти после
13/2
13/3
...
13/9


т.е. пересортировать требуется и постфикс, ежели он числовой.
с чем вас и поздравляю :)
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592636
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Raveren]Ну почему же не интересует? Интересует. [quot]

Тогда огласите, какой индекс Вы планируете использовать.
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592644
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
assa RaverenНу почему же не интересует? Интересует. А разве есть ещё варианты побыстрей?
если я правильно понимаю - проблема у вас рекурсивная
т.е
13/12
должно итти после
13/2
13/3
...
13/9


т.е. пересортировать требуется и постфикс, ежели он числовой.
с чем вас и поздравляю :)

Возможно есть вариант выделить (может быть даже и регулярным выражением) и другие части номера дома, такие как "дробь", "корпус" и т.д. и т.п. Тогда отсортировать будет можно и постфикс.
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592652
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaпересортировать требуется и постфикс, ежели он числовой.
с чем вас и поздравляю :)

Отдельно интересно как именно должны сортироваться такие вещи
12/13Б строение 6.
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592653
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ilejn[quot Raveren]Ну почему же не интересует? Интересует. [quot]

Тогда огласите, какой индекс Вы планируете использовать.

может быть такой:
Код: plaintext
1.
2.
3.
4.
CREATE INDEX t2_substr_index
  ON t2
  USING btree
  ("substring"(r2::text, '^\\d*'::text));
...
Рейтинг: 0 / 0
Сортировка character varying
    #34592715
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilejn assaпересортировать требуется и постфикс, ежели он числовой.
с чем вас и поздравляю :)

Отдельно интересно как именно должны сортироваться такие вещи
12/13Б строение 6.

зы . функциональный индекс "спасает" только при сортировке (небольших?) выборок сплошных (по индексу) диапазонов. В противном случае видимо будет дешевле вычислять функцию сортировки, чем поднимать ее (т.е. индекс) с диска.

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


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