Postgresql - сортировка поля символов с помощью специальных символов, цифр и алфавитов - PullRequest
1 голос
/ 31 мая 2019

У меня есть следующие данные в одной из моих таблиц Postgresql.

name
-----------------
AdvertiserTest123  
Advertiser ADV 833  
:1Advertiser  
02 Advertiser  
MH Advertiser

Когда я запрашиваю как: Select * from adv_names order by name;

Я получаю вывод

AdvertiserTest123  
Advertiser ADV 833  
:1Advertiser  
02 Advertiser  
MH Advertiser  

Я ожидаю, что порядок сортировки будет именем со специальными символами, последующими числами и затем алфавитами. Если я не ошибаюсь, это то, как он ведет себя на Sql Server.

Я попытался изменить сортировку и попытался найти ascii. Это не работает так, как я ожидаю. Может ли кто-нибудь помочь в этом?

Ожидаемый результат:

:1Advertiser  
02 Advertiser  
Advertiser ADV 833  
AdvertiserTest123  
MH Advertiser

1 Ответ

2 голосов
/ 31 мая 2019

Реальный вопрос здесь в том, насколько разумны ваши ожиданияСортировка текстовых значений в SQL определяется сортировкой.В PostgreSQL вы можете изменять параметры сортировки при выполнении запроса.

select * from adv_names order by "name" collate "POSIX";

Это сводится к следующему: в каких параметрах сортировки специальные символы располагаются перед числами?Я не думаю, ни одна из сортировок работает таким образом, но я могу ошибаться.(Мне не нужно много думать о сопоставлениях, где я работаю.)

Чтобы увидеть, какие сопоставления доступны для вас, запустите это.

select * from pg_collation;

В крайнем случае, вы можете создатьваше собственное сопоставление.См. Создание сопоставления .Я не уверен, что это сработает для вас.Это зависит от поддержки ОС и параметров сборки PostgreSQL.

...