如何在sql中使用多个值

时间:2016-07-17 09:14:23

标签: sql oracle

 select * from user_table where name in ('123%','test%','dummy%')

如何确保此where子句不是完全匹配,而是like条件?

3 个答案:

答案 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获得相同的行。