我正试图找到一种强制数组使其大写或小写的方法。这样无论用户输入什么,他们都会得到结果。这是查询:
select * from table where any(:id) = databasecolumn
:id是用户输入的字符数组(可以是小写或大写),我需要确保无论用户输入什么,他们都会得到结果。
只要用户输入大写(因为数据库值也是大写),这就可以工作。但是当他们输入小写字母时,他们没有得到回应。
我试过了:
select * from table where any(upper(:id)) = upper(databasecolumn)
但这不起作用,因为函数“upper”不适用于数组。当我使用单个输入而不是数组时,它工作正常。
你有什么指针吗?我找不到varchars数组的等效函数。答案 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
但