我想從數據庫中找出哪些名稱以A開頭到M或者是否有任何方法在通配符(LIKE)中使用多個參數,例如:在通配符(LIKE)中使用多個參數的ORACLE方法
SELECT name
FROM database
WHERE name LIKE (I want to search A to M here);
我想從數據庫中找出哪些名稱以A開頭到M或者是否有任何方法在通配符(LIKE)中使用多個參數,例如:在通配符(LIKE)中使用多個參數的ORACLE方法
SELECT name
FROM database
WHERE name LIKE (I want to search A to M here);
嘗試:
select ...
where ... substr(name,1,1) between 'A' and 'M'
可能要:
select ...
where ... upper(substr(name,1,1)) between 'A' and 'M'
這確實有可能是可轉位的優勢,雖然該指數將大概只能用於更小的範圍。
SELECT name FROM database WHERE name LIKE '[A-M]'
有沒有必要使用substr或regexp_like或類似。
下面的語句是簡單得多(而且具有可以使用普通索引的優勢):
SELECT name FROM database WHERE name >= 'A' AND name < 'N';
此查詢的工作是「AA」>「A」和所有字符串開頭的基礎上, 'M'在'N'之前排序。
就索引使用而言,我假定既然你想把字母表的一半作爲第一個字母,你也將查詢總行數的一半,因此Oracle會更喜歡全文索引,表掃描。
呃,在Oracle上做這個工作嗎? –