【问题标题】:Searching for multiple strings in Oracle SQL在 Oracle SQL 中搜索多个字符串
【发布时间】:2018-12-06 16:55:29
【问题描述】:

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

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

我的代码:

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%'
;

我试过'IN'

AND REGEXP_SUBSTR(column_1, '[0-9]+',1,1) **IN** ('%12345%', '%12346%')

但这不起作用。

我是新手,非常感谢任何帮助/指导!

【问题讨论】:

    标签: sql oracle


    【解决方案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')
    

    【讨论】:

    • 你的正则表达式中的空格看起来不对 - 这不应该是 12345|12346|12347 以确保像 AB:12346 这样的值也匹配吗?
    【解决方案2】:

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

    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 中,加号。

    【讨论】:

      【解决方案3】:

      这是你要找的吗?

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2013-09-08
        • 2021-01-16
        • 2011-11-20
        相关资源
        最近更新 更多