2013-12-12 101 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會更喜歡全文索引,表掃描。

相關問題