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); |
|
|
|
|
|