特定のテキストが含まれているかどうかを確認するために、チェック付きのcaseステートメントでmutlipleを使用できる実用的な例を探します。
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
Oracleでは、文字列リテラルは一重引用符で囲む必要があります。
部分文字列の一致を見つけるには、LIKE
を使用できます。
_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
_
おそらく次のようなものが必要です:
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
[〜#〜] instr [〜#〜] の使用は、可能な解決策の1つにすぎません。 [〜#〜] like [〜#〜] 、 正規表現 など、同じクエリを記述するさまざまな方法を使用できます。これは非常に明白で、自明です。
あなたはこれを試すことができます:
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
like
funcを使用できます
Containsの代わりにINSTR関数を使用します