Как сделать тип данных ENUM строчными в SQL? - PullRequest
0 голосов
/ 29 ноября 2018

Сейчас я пишу Java-программу, которая представляет собой API для выполнения запросов к базе данных SQL.Существует вызов API поиска, который сравнивает параметры с несколькими полями и изменяет параметры на строчные и данные на строчные при сравнении, поэтому проблем не возникает.Например,

SELECT
    ...
FROM
    ...
WHERE
    LOWER( position.positionname ) = parameters;

Эта часть работает, однако есть один тип данных, с которым у меня возникают проблемы при сравнении, поскольку это тип данных ENUM, называемый location.Вот SQL.

CREATE TYPE location AS ENUM
(
    'New York', 'Los Angeles', 'Chicago',
    'London','Paris','Tokyo'
);

Я не могу использовать функцию lower(), потому что это не строка.Кто-то, ищущий New York в нашем приложении, может не обязательно использовать правильные буквы, но мы все же хотим, чтобы приложение работало.Есть ли способ преобразовать перечисление в строку, а затем понизить () все это в запросе SQL?

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Насколько я смог определить и только что его протестировал, запрос к столбцу ENUM нечувствителен к регистру.Таким образом, в исходном вопросе при поиске «Нью-Йорк», «Нью-Йорк» или «Нью-Йорк» или любого другого варианта регистра все находят и возвращают запись, как в исходном объявлении столбца ENUM, т.е. «Нью-Йорк».

Таким образом, при работе с ENUM можно игнорировать изменения регистра ввода данных пользователем (и я полагаю, что тип SET тоже, но еще не проверен).

0 голосов
/ 29 ноября 2018

Это может звучать странно, но вам нужно привести тип перечисления к строковому или текстовому типу, чтобы запустить на нем строковую функцию, используя либо cast(position.positionname as text), либо сокращение position.positionname::text

SELECT
    ...
FROM
    ...
WHERE
    LOWER( position.positionname::text ) = parameters;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...