Postgres String Сравнение с ведущими пробелами - PullRequest
1 голос
/ 24 марта 2019

Я хочу, чтобы Postgres включал начальные пробелы в строку при сравнении строк. Однако это не относится к версии 9.5.

select ' s' > 'ny';
 ?column?
----------
 t
(1 row)

Я хочу, чтобы это возвращало false, и я подумал, что так и должно быть, поскольку значение ASCII для пробела меньше, чем 'n'. Есть ли какие-то настройки, которые нужно изменить, чтобы они могли возвращать false?

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

https://www.postgresql.org/docs/current/collation.html

Функция сортировки позволяет указать порядок сортировки и классификацию символов для данных по столбцам или даже по каждой операции.
...

Когда система базы данных должна выполнить упорядочивание или классификацию символов, она использует сопоставление входного выражения.Это происходит, например, с предложениями ORDER BY и вызовами функций или операторов, такими как <.Правила сортировки, применяемые для предложения ORDER BY, - это просто параметры сортировки ключа сортировки.Параметры сортировки, применяемые для вызова функции или оператора, получаются из аргументов, как описано ниже.В дополнение к операторам сравнения, параметры сортировки учитываются функциями, которые преобразуют буквы в нижний и верхний регистр, такие как нижний, верхний и initcap;с помощью операторов сопоставления с образцом;и to_char и смежными функциями. </p>

Пример различного поведения сопоставления:

postgres=# select ' s' > 'ny' collate "en_GB.utf8";
?column? 
----------
t
(1 row)

postgres=# select ' s' > 'ny' collate "C";
?column? 
----------
f
(1 row)

SELECT * FROM pg_collation; для просмотра доступных сопоставлений.

0 голосов
/ 24 марта 2019

Попробуйте с:

select ' s'::bytea > 'ny'::bytea;

Я тестировал с Postgres 11, и он работает.См. документацию .

...