假设我有一个名为comodity_group
的表,结构如下:
+----------+-------+
| group_id | name |
+----------+-------+
| 1 | Data1 |
+----------+-------+
| 2 | Data2 |
+----------+-------+
| 3 | data3 |
+----------+-------+
我有以下查询
SELECT * FROM comodity_group WHERE name IN('data1','data2','data3')
查询返回0结果,因为条件全部为小写(注意条件也是动态的,这意味着它可以是Data1或daTa1等)
所以我希望将条件和字段名称都设为小写,而不区分大小写。
答案 0 :(得分:0)
您可以将您的姓名数据转换为小写
SELECT * FROM comodity_group WHERE lower(name) IN('data1','data2','data3')
答案 1 :(得分:0)
假设您可以控制查询的IN
子句中出现的术语,那么在进行比较之前,您只需要将name
列小写:
SELECT *
FROM commodity_group
WHERE LOWER(name) IN ('data1', 'data2', 'data3')
在我的脑海中,你也可以加入包含搜索词的内联表:
WITH cte AS (
SELECT 'daTa1' AS name
UNION ALL
SELECT 'Data2'
UNION ALL
SELECT 'datA3'
)
SELECT *
FROM commodity_group t1
INNER JOIN cte t2
ON LOWER(t1.name) = LOWER(t2.name)
通过实际表中可能的匹配,我们现在能够小写比较的两边。
答案 2 :(得分:0)
您可以使用ILIKE
和数组:
select *
from comodity_group
where name ilike any (array['Data1', 'data2', 'dATA3']);
请注意,由于ILIKE运算符无法在name
列上使用常规索引,因此不会很快。