【问题标题】:oracle sql - select statement with multiple "case when" and check for contains textoracle sql - 选择具有多个“case when”的语句并检查是否包含文本
【发布时间】:2016-11-13 01:14:26
【问题描述】:

我寻找一个工作示例,我可以在 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

【问题讨论】:

  • 您的问题到底是什么? Else "No Match" 是无效的 SQL(除非您有一个名为 No Match 的列)。还 contains()` 是一个 Oracle 全文函数,需要与您使用的语法不同的语法。您确定您使用的是 Oracle 吗?
  • 包含运算符似乎不为人所知,我得到一个错误
  • 好的,除了“contains”之外,我还可以使用哪个函数来查找子字符串匹配项?

标签: sql oracle case contains


【解决方案1】:

使用 INSTR 函数代替 Contains

【讨论】:

    【解决方案2】:

    你可能需要这样的东西:

    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 只是可能的解决方案之一;您可以使用LIKEregular expressions 等以及编写相同查询的不同方式;我相信这很简单,可以不言自明。

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      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
      

      你可以使用likefunc

      【讨论】:

        【解决方案4】:

        在 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
        

        【讨论】:

          猜你喜欢
          • 2021-02-05
          • 2017-10-31
          • 1970-01-01
          • 2022-07-08
          • 2015-02-11
          • 2012-04-29
          • 1970-01-01
          • 2021-04-18
          • 2020-01-27
          相关资源
          最近更新 更多