Поиск нескольких строк в Oracle SQL - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь найти список различных строк в таблице, которая ограничена функцией REGEXP_SUBSTR ().

Что делает мой код ниже, так это то, что он удаляет все, что содержит «PO:» и «HF:», и ищет число (например, 12345) в таблице. Мне нужен быстрый способ поиска нескольких номеров (например, 12345, 12346, 12347 ...), и мне не нужно каждый раз использовать функцию REGEXP_SUBSTR () с 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_SUBSTR(column_1, '[0-9]+',1,1) LIKE '%12345%'
;

Я пробовал 'IN'

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

но это не работает.

Я новичок, поэтому любая помощь / руководство очень ценится!

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Уже есть пост, который должен ответить на этот вопрос. Вы ищете групповое соединение.

Объединение таблиц с 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 + '%'

То, что мы здесь делаем, - это просмотр двух столов. Первый стол - это ваш основной стол. Вторая таблица, в данном случае мы просто смотрим на объединение, содержит значения, которым вы хотите соответствовать. Вы соединяете свою первую таблицу со второй таблицей в двух столбцах, как обычно. Однако вы можете заменить знак = на подобное утверждение. В зависимости от типа SQL, с которым вы работаете, вы будете использовать соответствующую функцию concat для переноса строки поиска в %. В Oracle вы бы использовали каналы, в SQL Server, а также знаки плюс.

0 голосов
/ 27 июня 2018

Как насчет 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')
0 голосов
/ 27 июня 2018

Это то, что вы ищете?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...