oracle sql - 选择具有多个“case when”的语句并检查是否包含文本

新手上路,请多包涵

我寻找一个工作示例,当案例陈述检查是否包含特定文本时,我可以使用 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

原文由 megloff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

在 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

原文由 MT0 发布,翻译遵循 CC BY-SA 3.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

你可以使用 like 功能

原文由 Ersin Gulbahar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进