如何在SQL中使ENUM数据类型小写?

时间:2018-11-29 04:58:25

标签: sql postgresql api enums

现在,我正在编写一个Java程序,该程序是一个API,可以在SQL数据库上运行查询。有一个搜索API调用,它将参数与多个字段进行比较,并且在比较时将参数更改为小写,将数据更改为小写,因此没有问题。例如

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

这部分正在工作,但是,我无法比较一种数据类型,因为它是一种称为位置的ENUM数据类型。这是SQL。

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

我不能在其上使用lower()函数,因为它不是字符串。在我们的应用程序中搜索New York的人不一定会用正确的字母大写,但是我们仍然希望该应用程序能够正常工作。有没有一种方法可以将枚举转换为字符串,然后在SQL查询中将它们全部降低()?

2 个答案:

答案 0 :(得分:1)

听起来可能很奇怪,但是您需要将枚举类型转换为字符串或文本类型,以便使用cast(position.positionname as text)或简写position.positionname::text在其上运行字符串函数

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

答案 1 :(得分:0)

据我所能确定并刚刚测试过,对ENUM列的查询不区分大小写。因此,在原始问题中,搜索“纽约”或“ NEW YORK”或“ New YORK”或任何其他情况下的变体都将找到并返回该条目,就像原始ENUM列声明(即“ New York”)中一样。

因此,在处理ENUM时,可以忽略用户输入的大小写变化(我相信也是SET类型,但尚未测试)。