回答

收藏

PostgreSQL对数组不区分大小写SELECT

技术问答 技术问答 222 人阅读 | 0 人回复 | 2023-09-13

我在Google或者文档在这里找不到答案时遇到了问题…4 M6 N# \+ Z( V& _" ]
我需要选择不区分大小写的数组类型。* V4 n+ p- J) C: q* m
因此,如果:+ ^) [8 t4 R% l0 [) J  h7 b, E  \  S7 L
value = {"Foo","bar","bAz"}我需要" S& d& L  x7 ]; B9 i$ _! A9 f! z
SELECT value FROM table WHERE 'foo' = ANY(value)匹配。' p; i6 i' j- Q- B! b' d( i
我尝试了很多lower()组合,但都没有成功。
4 T( P0 D! D, f1 WILIKE而不是=工作似乎很担心,但我一直很担心LIKE-最好的办法是什么?
# ^: N8 v( f. R, ?                                                               
1 \) o& N( Y4 Q/ I$ c" n    解决方案:                                                                9 O5 C5 b2 n) p
                                                                未提及的替代方法是安装PostgreSQL9 W  _: f3 H4 d. `
8.4 附带的citext扩展,并使用数组citext:( n* X  B6 V* K1 ^' C9 w4 _
regress=# CREATE EXTENSION citext;regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[]column? ---------- t(1 row)如果您想对此严格正确并避免扩展,则必须执行一些PostgreSQL unnest因为(),元素编号Pg数组操作不多,尤其是没有功能映射操作。, s3 l4 g; o  F8 g
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;… $ 1是数组参数。在你的情况下,我认为你可以作弊,因为你不在乎保留数组的顺序,所以你可以执行以下操作:
; Y% Z* i% t! D  G/ d* F( z0 HSELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则