如何从预言机获取不区分大小写的记录



如何从表中获取从"a"开始的所有customer_names customer

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

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

create index idx_fbi_upname
on
table( upper(name) );
select *
  from table t
 where upper(t.name) like 'A%'

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

获取包含字母"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)上的索引。 但是,这仍然可能不使用索引,因为此类字符串操作可能没有足够的选择性。

最新更新