在Oracle SQL中搜索多个字符串

时间:2018-06-27 17:54:35

标签: sql oracle

我正在尝试在REGEXP_SUBSTR()函数约束的表中搜索不同字符串的列表。

我下面的代码在做什么,它将删除包含“ PO:”和“ HF:”的所有内容,并在表中搜索一个数字(例如:12345)。我想要一种快速的方法来搜索多个数字(例如12345、12346、12347 ...),而不必每次都对LIKE使用REGEXP_SUBSTR()函数。

我的代码:

mvn spring-boot:run

我尝试过“ IN”

SELECT column_1, column_2, column_3    
FROM table_1
WHERE column_1 NOT LIKE 'PO:%'
AND column_1 NOT LIKE 'HF:%'
AND REGEXP_SUBSTR(column_1, '[0-9]+',1,1) LIKE '%12345%'
;

但这不起作用。

我是新来的,因此非常感谢您的帮助/指导!

3 个答案:

答案 0 :(得分:1)

regexp_like()

SELECT column_1, column_2, column_3    
FROM table_1
WHERE column_1 NOT LIKE 'PO:%' AND
      column_1 NOT LIKE 'HF:%' AND
      regexp_like(column_1, '12345|12346|12347')

答案 1 :(得分:0)

这是您要寻找的吗?

SELECT
    *
FROM
    (
        SELECT
            'PO123455HF' AS str
        FROM
            dual
        UNION
        SELECT
            'PO124455HF' AS str
        FROM
            dual
        UNION
        SELECT
            'PO1236855HF' AS str
        FROM
            dual
        UNION
        SELECT
            'PO1243545HF' AS str
        FROM
            dual
        UNION
        SELECT
            'POHF' AS str
        FROM
            dual
    )
WHERE
    REGEXP_LIKE ( str,
                  '[0-9]' );

输出-

PO123455HF
PO1236855HF
PO1243545HF
PO124455HF

答案 2 :(得分:0)

已经有一个帖子可以回答这个问题。您正在寻找通配符联接。

Joining tables with LIKE (SQL)

select * 
from tableone 
   join tabletwo on tableone.pizzaone like ('%' || tabletwo.pizzatwo || '%')

这是一个使用t-sql的肮脏示例。

create table #temp1 
(col1 varchar(15))
insert into #temp1 values 
 ('abcde') --contains 'ab'
,('bcde')  --does not contain 'ab' or 'ef'
,('defgh') --contains 'ef'

 select 
    a.col1 
    from #temp1 a
    inner join 
    (
    select 'ab' as col2 
    union 
    select 'ef' as col2 
    ) b
    on a.col1 like '%' + b.col2 + '%'

我们在这里正在看两个表。第一个表是您的主表。第二个表(在这种情况下,我们只是看一个并集)包含您要匹配的值。您将像往常一样将两列的第一个表连接到第二个表。但是,您可以将=符号替换为like语句。根据您使用的SQL风格,将使用适当的concat函数将搜索字符串包装在%中。在Oracle中,您将在SQL Server中使用管道以及加号。