我有一个单列表。 表T包含如下数据:
A11
B1
As112
DF123
VG112
我正在寻找替代品(VG%和DF%)...因为我认为如果有更多比较它可能会影响性能
答案 0 :(得分:1)
以下是您可以尝试的一些替代方案。如果在where子句(substr
)中具有特定于这些表达式的基于函数的索引,则性能可能会提高。
select * FROM t where SUBSTR(data,1,2) = 'VG'; -- If you are always comparing first 2 characters.
select * FROM t where SUBSTR(data,1,2) IN ( 'VG' , 'DF'); -- Multiple comparisions
INSTR
是另一种选择,但您不能拥有适合此比较的索引。
select * FROM t where INSTR(data,'VG') = 1;
答案 1 :(得分:0)
我认为like
是最佳选择。您可以创建模式列表并使用join,如下所示:
select * from t join p on t.text like p.pattern||'%'
如果您使用内置类型odcivarchar2list
或使用union all
定义模式无关紧要,则只会缩短语法。
示例:
with t(text) as (
select column_value
from table(sys.odcivarchar2list('A11', 'B1', 'As112', 'DF123', 'VG112'))),
p(pattern) as (
select column_value
from table(sys.odcivarchar2list('DF', 'VG')))
select *
from t join p on t.text like p.pattern||'%'
TEXT PATTERN
------ -------
DF123 DF
VG112 VG