2016-07-11 8 views
0

ケーススタディwihchで特定のテキストが含まれているかどうかを確認する際にmutlipleを使用できる実例を探します: oracle sql - 複数の "case when"を含むステートメントを選択し、テキストが含まれているかどうかを確認してください。

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 
+0

正確にあなたの質問は何ですか

は、あなたがLIKEを使用することができますいずれかのサブストリングの一致を検索するには? 'Else" No Match "は無効なSQLです(' No Match'という名前の列がない限り)。 contains() 'はOracleフルテキスト関数で、使用する構文とは異なる構文を必要とします。 **あなたはオラクルを使用していますか? –

+0

contains演算子がわからないようですが、 "contains"以外の関数を使用して部分文字列の一致を調べることはできますか?エラー – megloff

+0

が表示されます。 – megloff

答えて

1

を使用することができ、単一引用符で囲まする必要があります。

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 

または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 

または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 
+0

ありがとう、これは非常に役に立ちました – megloff

0

使用INSTR関数の代わりに、あなたは、おそらくこのような何か必要

1

含まれています:INSTRを使用して

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 

が可能な解決策の一つだけです。 LIKEregular expressionsなど、同じクエリを書くさまざまな方法を使用できます。私はこれがかなり自明であることが分かります。

0

あなたはこれを試すことができます。

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 

は、Oracleの文字列リテラルではlike FUNC

関連する問題