如何从oracle获取不区分大小写的记录?

时间:2016-02-02 12:01:52

标签: sql database oracle oracle11g

如何从' a'开始获取所有customer_namescustomer表?

为此,我希望获得包含字母a的所有名称,而不考虑区分大小写。我不想使用to_upper(),因为它会对查询效果产生负面影响。

2 个答案:

答案 0 :(得分:2)

如果您只关心性能,可以创建基于函数的索引

create index idx_fbi_upname
on
table( upper(name) );

select *
  from table t
 where upper(t.name) like 'A%'

此查询可以使用upper(name)上的索引。当然,如果您想要区分大小写和不区分大小写的查询,最终可能会有两倍的索引,这将涉及更多的存储空间和更多的维护工作。

答案 1 :(得分:0)

获取包含字母“a”的名称可能需要进行全表扫描。你可以这样做:

where name like '%a%' or name like '%A%'

where lower(name) like '%a%'

在大多数情况下,这些都需要全表扫描。

如果您只是在寻找带有“a”的开始的行,那么您可以这样做:

select t.*
from table t
where t.name like 'a%'
union all
select t.*
from table t
where t.name like 'A%';

这可以使用t(name)上的索引。但是,这仍然可能不使用索引,因为这样的字符串操作可能没有足够的选择性。