Регистры строк
По умолчанию 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?