gpt4 book ai didi

sql - 在 PostgreSQL 中查询 iLike 列表

转载 作者:行者123 更新时间:2023-11-29 11:59:20 25 4
gpt4 key购买 nike

我正在编写一个低效的查询,如下所示:

WHERE (Field iLIKE '%cat%' OR Field iLIKE '%dog%' OR Field  iLIKE '%animal%' OR Field  iLIKE '%pet%') 

而我想写的是:

WHERE Field iLIKE ('%cat%','%dog%','%animal%','%pet%')

有没有简单的方法可以做到这一点?

最佳答案

您可以获得强大的正则表达式运算符 ~~* 以区分大小写:

WHERE Field ~* '(cat|dog|animal|pet)'

SIMILAR TO 区分大小写,因此您必须:

WHERE Field SIMILAR TO '%([Cc][Aa][Tt]|[Dd][Oo][Gg]|[Aa][Nn][Ii][Mm][Aa][Ll]|[Pp][Ee][Tt])%'

ANY ARRAY 也可以,但性能更差:

WHERE Field ILIKE ANY (array['%cat%','%dog%','%animal%','%pet%'])

Field 中使用一些具有 1000000 行的 BTREE INDEX 的虚拟数据,我得到了这些结果:

╔═════════════╦═════════════╗
║ Operator ║ Time (secs) ║
╠═════════════╬═════════════╣
║ ~* ║ 1.5 ║
║ SIMILAR TO ║ 1.4 ║
║ ANY ARRAY ║ 4.0 ║
║ OR OR OR... ║ 4.0 ║
╚═════════════╩═════════════╝

关于sql - 在 PostgreSQL 中查询 iLike 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38337386/

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