it-swarm.com.de

Suchen Sie nach Zeilen, in denen eine Spalte mit einem Suchmuster übereinstimmt

Ich habe eine Tabelle "Test" Mit 15 verschiedenen Spalten verschiedener Datentypen.

Ich suche nach Zeilen mit Zeichen wie "ABC". Aber "ABC" Kann in jeder Spalte vorhanden sein und ich möchte ganze Datensätze mit "ABC" Finden.

Ich kann die Zeile nicht mit einer WHERE-Klausel einschränken, da ich wirklich keine Ahnung habe, in welcher Spalte sich das ABC befindet. Gibt es eine Möglichkeit, dies zu tun?

7
Sagar Makhesana

Nun, es gibt den einfachen "Brute Force" Weg:

SELECT *
FROM   "Test"
WHERE (col1 LIKE '%ABC%' OR
       col2 LIKE '%ABC%' OR
       col3 LIKE '%ABC%' OR
       ...
       col15 LIKE '%ABC%');

Klammern sind nicht erforderlich, wenn Sie keine zusätzlichen WHERE - Ausdrücke haben. Wahrscheinlich schneller (und auf jeden Fall robuster) als das Verketten aller Spalten für einen einzelnen LIKE -Test.

5

In Oracle 11g können Sie UNPIVOT verwenden

select *
from test unpivot (any_column for source_column in (col1, col2, col3, ...))
where any_column like '%ABC%';

Beachten Sie, dass diese Abfrage alle zurückgibt, wenn eine Zeile ABC in mehr als einer Spalte enthält. Wenn Sie die ursprünglichen Zeilen benötigen, verwenden Sie eine Unterabfrage

select *
from test
where id in (
  select id
  from test unpivot (any_column for source_column in (col1, col2, col3, ...))
  where any_column like '%ABC%'
);
2
sjk

Mit der integrierten Instrumentenfunktion können Sie Folgendes tun:

Select * from Test where instr(col1||col2||col3,'ABC') <> 0;
1
Nicolas Durand