2013-12-12 73 views

回答

0

尝试:

select ... 
where ... substr(name,1,1) between 'A' and 'M' 

可能要:

select ... 
where ... upper(substr(name,1,1)) between 'A' and 'M' 

这确实有可能是可转位的优势,虽然该指数将大概只能用于更小的范围。

0
SELECT name FROM database WHERE name LIKE '[A-M]' 
+0

呃,在Oracle上做这个工作吗? –

0

使用REGEXP_LIKE,请参阅here更多的细节。

尝试这样,

SELECT name FROM database WHERE REGEXP_LIKE(name, '^[A-M]'); 
0

有没有必要使用substr或regexp_like或类似。

下面的语句是简单得多(而且具有可以使用普通索引的优势):

SELECT name FROM database WHERE name >= 'A' AND name < 'N'; 

此查询的工作是“AA”>“A”和所有字符串开头的基础上, 'M'在'N'之前排序。

就索引使用而言,我假定既然你想把字母表的一半作为第一个字母,你也将查询总行数的一半,因此Oracle会更喜欢全文索引,表扫描。

相关问题