【问题标题】:Postgres Array[VarChar] uppercase?Postgres Array[VarChar] 大写?
【发布时间】:2017-03-21 12:40:35
【问题描述】:

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

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

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

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

我试过这个:

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

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

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

【问题讨论】:

  • 你想做什么?默认情况下,比较不是不区分大小写吗?为什么你需要申请upper

标签: sql postgresql jdbc


【解决方案1】:

你可以使用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

【讨论】:

    【解决方案2】:

    你可以像这里一样使用双重转换:

    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 的好处

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2021-10-27
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 2014-03-14
      • 2022-11-01
      相关资源
      最近更新 更多