现在,我正在编写一个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查询中将它们全部降低()?
答案 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类型,但尚未测试)。