在 IN 条件下使用 LOWER

Dar*_*ama 2 postgresql

假设我有一个名为的表comodity_group,其结构如下所示:

+----------+-------+
| group_id | name  |
+----------+-------+
| 1        | Data1 |
+----------+-------+
| 2        | Data2 |
+----------+-------+
| 3        | data3 |
+----------+-------+
Run Code Online (Sandbox Code Playgroud)

我有以下查询

SELECT * FROM comodity_group WHERE name IN('data1','data2','data3')
Run Code Online (Sandbox Code Playgroud)

查询返回0结果,因为条件都是小写的(注意条件也是动态的,可以是Data1或daTa1等)

所以我想将条件和字段名称都设为小写,换句话说,不区分大小写。

a_h*_*ame 5

您可以使用ILIKE一个数组:

select *
from comodity_group
where name ilike any (array['Data1', 'data2', 'dATA3']);
Run Code Online (Sandbox Code Playgroud)

请注意,这不会很快,因为 ILIKE 运算符无法使用name列上的常规索引。


Ami*_*mit 1

您可以将您的姓名数据转换为小写

SELECT * FROM comodity_group WHERE lower(name) IN('data1','data2','data3')
Run Code Online (Sandbox Code Playgroud)