Postgres数组[VarChar]大写?

时间:2017-03-21 12:40:35

标签: sql postgresql jdbc

我正试图找到一种强制数组使其大写或小写的方法。这样无论用户输入什么,他们都会得到结果。这是查询:

select * from table where any(:id) = databasecolumn

:id是用户输入的字符数组(可以是小写或大写),我需要确保无论用户输入什么,他们都会得到结果。

只要用户输入大写(因为数据库值也是大写),这就可以工作。但是当他们输入小写字母时,他们没有得到回应。

我试过了:

select * from table where any(upper(:id)) = upper(databasecolumn)

但这不起作用,因为函数“upper”不适用于数组。当我使用单个输入而不是数组时,它工作正常。

你有什么指针吗?我找不到varchars数组的等效函数。

2 个答案:

答案 0 :(得分:2)

您可以使用ILIKE

select * 
from table 
where databasecolumn ILIKE any(:id);

这:

with data (col) as (
  values ('one'), ('Two'), ('THREE')
)
select *
from data
where col ilike any(array['one', 'two', 'three']);

返回:

col  
-----
one  
Two  
THREE

答案 1 :(得分:0)

你可以像这里一样使用双重投射:

t=# with a as (select '{caSe1,cAse2}'::text[] r) select r,upper(r::text)::text[] from a where true;
       r       |     upper
---------------+---------------
 {caSe1,cAse2} | {CASE1,CASE2}
(1 row)

它忽略了使用ANY

的好处