PostgreSQL中如何对字符串列表应用UPPER/LOWER函数?
解决PostgreSQL中UPPER函数无法直接用于IN子句多值的问题
你遇到的问题是因为UPPER()函数仅支持单个输入参数,不能直接传入多个字符串作为参数,所以直接写IN UPPER(...)会触发语法错误。下面提供几种可行的解决方式:
方法1:为每个字符串单独调用UPPER函数
直接给IN子句里的每个字符串都套上UPPER(),这是最直观的写法:
select distinct(tx.sub_tran_type) from tran.txn tx where tx.sub_tran_type in (UPPER('homede'), UPPER('online'), UPPER('omni-online'), UPPER('amznow')) limit 100
方法2:用数组+UNNEST批量处理
如果需要处理的字符串数量较多,可以先把它们放进数组,再用UNNEST展开后统一转大写,写法更简洁:
select distinct(tx.sub_tran_type) from tran.txn tx where tx.sub_tran_type in ( SELECT UPPER(unnest(ARRAY['homede','online','omni-online','amznow'])) ) limit 100
方法3:反转处理逻辑(注意性能影响)
也可以把字段sub_tran_type转成大写,再和原字符串的大写形式比较,但这种写法会导致字段上的索引无法被使用(如果有索引的话),数据量大时可能变慢:
select distinct(tx.sub_tran_type) from tran.txn tx where UPPER(tx.sub_tran_type) in ('HOMEDE','ONLINE','OMNI-ONLINE','AMZNOW') limit 100
内容的提问来源于stack exchange,提问作者Jagvir
相关产品推荐
相关产品推荐

