it-swarm.com.de

oracle sql - select-Anweisung mit mehrfachem "case when" und prüfen auf enthält Text

Ich suche nach einem Arbeitsbeispiel, in dem ich mit if mehrere Anweisungen verwenden kann, um zu überprüfen, ob ein bestimmter Text enthalten ist:

SELECT 
  ID,
  NAME,
  (SELECT 
      (Case when Contains(Descr,"Test") Then "contains Test" 
        when Contains(Descr, "Other") Then "contains Other"
        Else "No Match" End) From DESCRIPTION
       where item_id = id
  ) as "Match"
  From Item
3
megloff

In Oracle müssen String-Literale in einfache Anführungszeichen gesetzt werden.

Um eine Unterzeichenfolge zu finden, können Sie entweder LIKE verwenden:

SELECT  ID,
        NAME,
        CASE WHEN Descr LIKE '%Test%'  THEN 'Contains Test'
             WHEN Descr LIKE '%Other%' THEN 'Contains Other'
             ELSE 'No Match'
        END AS Match
FROM    Item i
        LEFT OUTER JOIN
        Description d
        ON i.id = d.item_id

oder INSTR():

SELECT  ID,
        NAME,
        CASE WHEN INSTR( Descr, 'Test' ) > 0  THEN 'Contains Test'
             WHEN INSTR( Descr, 'Other' ) > 0 THEN 'Contains Other'
             ELSE 'No Match'
        END AS Match
FROM    Item i
        LEFT OUTER JOIN
        Description d
        ON i.id = d.item_id

oder REGEXP_LIKE():

SELECT  ID,
        NAME,
        CASE WHEN REGEXP_LIKE( Descr, 'Test' )  THEN 'Contains Test'
             WHEN REGEXP_LIKE( Descr, 'Other' ) THEN 'Contains Other'
             ELSE 'No Match'
        END AS Match
FROM    Item i
        LEFT OUTER JOIN
        Description d
        ON i.id = d.item_id
9
MT0

Du brauchst wahrscheinlich so etwas:

with Item(id, name, descr) as
(
 select 'id1', 'name1', 'description containing Test' from dual union all
 select 'id2', 'name2', 'description containing Others' from dual union all
 select 'id3', 'name3', 'description containing nothing interesting' from dual
)
SELECT 
    ID,
    NAME,
    descr,
    case
        when instr(Descr, 'Test') != 0 then 'contains Test' 
        when instr(Descr, 'Other')!= 0 then 'contains Other'
        Else 'No Match'
    End as "Match"
From Item

Die Verwendung von INSTR ist nur eine der möglichen Lösungen. Sie können WIE , reguläre Ausdrücke usw. und verschiedene Schreibweisen derselben Abfrage verwenden. Ich glaube, das ist klar genug, um sich selbst zu erklären.

1
Aleksej

sie können dies versuchen:

SELECT 
  1,
  2,
  (SELECT 
      (
      Case 
        when     'contains Test' like  '%Test%'   
                              Then 'contains Test' 
        when     'contains Test' like  '%Other%'  
                              Then 'contains Other'
        Else 'No Match'
      End
      ) From dual
       where 1 = 1
  ) as "Match"
  From dual

sie können like func verwenden

0
Ersin Gülbahar

Verwenden Sie die Funktion INSTR anstelle von Enthält 

0