2015-07-27 3 views
0

В одном из столбцов таблицы содержится следующее значение.Запрос для получения конкретных паттернов из столбца

All Files (*.*)|*.*|Bitmap (*.bmp)|*.bmp|Microsoft Word Document 
(*.docx)|*.docx|GIF (*.gif)|*.gif|JPEG (*.jpg)|*.jpg|PNG 
(*.png)|*.png|Adobe Reader (*.pdf)|*.pdf|TIFF (*.tif)|*.tif 

Мне нужен запрос, который будет получать bmp,docx,gif,jpg,png,pdf,tif из приведенных выше значений. Эти значения указаны в скобках.

+0

Вам нужно больше информации. Какая версия Oracle? Является ли ваш пример 3 строками с столбцами, разделенными по трубам, или всей строкой, как показано в одном столбце? Может ли быть пустое значение в круглых скобках? Покажите точный пример ожидаемого результата. что ты уже испробовал? Это может дать понять, что вы пытаетесь сделать. –

+0

Как насчет «Все файлы (*. *)»? –

ответ

0

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

SELECT * 
FROM your_table 
WHERE column_with_types IN ('(.bmp)','(.docx)','(.gif)','(.jpg)','(.png)','(.pdf)','(.tif)') 
0

Ok, учитывая эти предположения:

  • Ваши данные выборки 3 линии
  • Вся линия находится в одной колонке
  • Вы не хотите в *.* в первой строке

Попробуйте следующее:

SQL> with tbl(line_nbr, str) as (
     select 1, 'All Files (*.*)|*.*|Bitmap (*.bmp)|*.bmp|Microsoft Word Document' from dual 
     union 
     select 2, '(*.docx)|*.docx|GIF (*.gif)|*.gif|JPEG (*.jpg)|*.jpg|PNG' from dual 
     union 
     select 3, '(*.png)|*.png|Adobe Reader (*.pdf)|*.pdf|TIFF (*.tif)|*.tif' from dual 
    ) 
    SELECT line_nbr, str, 
      COLUMN_VALUE AS match_nbr, 
      REGEXP_SUBSTR(str ,'\(\*\.(\w*)\)', 1, COLUMN_VALUE, NULL, 1) AS match_value 
    FROM tbl, 
      TABLE(
      CAST(
       MULTISET(
       SELECT LEVEL 
       FROM DUAL 
       CONNECT BY LEVEL <= REGEXP_COUNT(str ,'\(\*\.\w*\)') 
      ) AS SYS.ODCINUMBERLIST 
      ) 
     ); 

    LINE_NBR STR                MATCH_NBR MATCH_VALUE 
---------- ---------------------------------------------------------------- ---------- ----------- 
     1 All Files (*.*)|*.*|Bitmap (*.bmp)|*.bmp|Microsoft Word Document   1 bmp 
     2 (*.docx)|*.docx|GIF (*.gif)|*.gif|JPEG (*.jpg)|*.jpg|PNG     1 docx 
     2 (*.docx)|*.docx|GIF (*.gif)|*.gif|JPEG (*.jpg)|*.jpg|PNG     2 gif 
     2 (*.docx)|*.docx|GIF (*.gif)|*.gif|JPEG (*.jpg)|*.jpg|PNG     3 jpg 
     3 (*.png)|*.png|Adobe Reader (*.pdf)|*.pdf|TIFF (*.tif)|*.tif    1 png 
     3 (*.png)|*.png|Adobe Reader (*.pdf)|*.pdf|TIFF (*.tif)|*.tif    2 pdf 
     3 (*.png)|*.png|Adobe Reader (*.pdf)|*.pdf|TIFF (*.tif)|*.tif    3 tif 

7 rows selected. 

SQL> 

Благодаря mt0 в этой должности на хитрость, чтобы правильно обрабатывать Mutiple строки: Split string by space and character as delimiter in Oracle with regexp_substr

Смежные вопросы