Регистры строк

По умолчанию Postgres учитывает регистр при сравнении строк.

Создадим таблицу, хранящую slug игрока и возраст игрока.

При этом slug игрока должен быть уникален, и он НЕ должен учитывать регистр.

Подключим расширение для сравнения строк без учёта их регистра.

CREATE EXTENSION IF NOT EXISTS citext;

Создадим таблицу для хранения информации об игроках.

CREATE TABLE players (player_slug CITEXT PRIMARY KEY, age INTEGER);

Добавим записи в созданную таблицу.

INSERT INTO players (player_slug, age) VALUES ('Maxim', 20);
INSERT INTO players (player_slug, age) VALUES ('Nina', 25);
INSERT INTO players (player_slug, age) VALUES ('MAXIM', 18);
INSERT INTO players (player_slug, age) VALUES ('NINA', 19);

В результате добавятся только первые две записи. Оставшиеся две записи НЕ будут добавлены в таблицу.

Преобразование регистров

Создадим таблицу для хранения слов.

CREATE TABLE words (word_id SERIAL PRIMARY KEY, word_value TEXT);

Заполним созданную таблицу.

INSERT INTO words (word_value) VALUES ('Hello');
INSERT INTO words (word_value) VALUES ('HELLO');
INSERT INTO words (word_value) VALUES ('heLLO');
INSERT INTO words (word_value) VALUES ('apple');
INSERT INTO words (word_value) VALUES ('aPPle');
INSERT INTO words (word_value) VALUES ('aPpLe');

Выведем запись, у которой поле word_value равняется значению Hello (выведется только одна запись)

SELECT * FROM words WHERE word_value = 'Hello';

Выведем записи, у которых поле word_value равняется значению Hello без учёта регистра (выведется 3 записи)

SELECT * FROM words WHERE LOWER(word_value) = LOWER('Hello');

Last updated

Was this helpful?