gpt4 book ai didi

postgresql - 怎么办 'any(::text[]) ilike::text'

转载 作者:行者123 更新时间:2023-11-29 11:54:40 24 4
gpt4 key购买 nike

表格结构

table1
pk int, email character varying(100)[]

data
1, {'mr_a@gmail.com', 'mr_b@yahoo.com', 'mr_c@postgre.com'}

我试图实现的是从记录中找到任何“gmail”

query
select * from table1 where any(email) ilike '%gmail%';

但是 any() 只能在左侧,unnest() 可能会降低性能。有人知道吗?

编辑

实际上,当我第一次发帖时,我有点困惑。我尝试通过 any(array[]) 实现。

这是我的实际结构

pk int, 
code1 character varying(100),
code2 character varying(100),
code3 character varying(100), ...

我的第一个方法是

select * from tabl1 where code1 ilike '%code%' or code2 ilike '%code%' or...

那我试试

select * from table1 where any(array[code1, code2, ...]) ilike '%code%'

这是行不通的。

最佳答案

创建一个实现ILIKE“向后”的运算符,例如:

CREATE FUNCTION backward_texticlike(text, text) RETURNS booleans
STRICT IMMUTABLE LANGUAGE SQL
AS $$ SELECT texticlike($2, $1) $$;

CREATE OPERATOR !!!~~* (
PROCEDURE = backward_texticlike,
LEFTARG = text,
RIGHTARG = text,
COMMUTATOR = ~~*
);

(请注意,ILIKE 在内部对应于运算符 ~~*。为反向选择您自己的名称。)

然后就可以运行了

SELECT * FROM table1 WHERE '%code%' !!!~~* ANY(ARRAY[code1, code2, ...]);

关于postgresql - 怎么办 'any(::text[]) ilike::text',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com