select * from user_table where name in ('123%','test%','dummy%')
如何确保此where
子句不是完全匹配,而是like
条件?
答案 0 :(得分:7)
在Oracle中,您可以使用regexp_like
,如下所示:
select *
from user_table
where regexp_like (name, '^(123|test|dummy)')
插入符号(^
)要求匹配位于 name 的开头,而管道|
则表示为OR。
但要小心,因为使用正则表达式几乎肯定会失去 name 上可能存在的索引的好处。
答案 1 :(得分:4)
像这样使用,
select *
from user_table
where name LIKE '123%'
OR name LIKE 'test%'
OR name Like 'dummy%';
MySQL中的另一个选项
select * from user_table where name REGEXP '^123|^test|^dummy';
答案 2 :(得分:1)
为了不丢失对Oracle中行的索引访问,可以使用表集合表达式:
SELECT
*
FROM
user_table
JOIN (SELECT column_value filter
FROM table(sys.odcivarchar2list('dummy%', '123%', 'test%'))
) ON user_table.name LIKE filter
过滤器表达式必须是不同的,否则您会多次从user_table
获得相同的行。