【问题标题】:How to identify and flag a sub-string from a column of entries in Oracle SQL如何从 Oracle SQL 中的条目列中识别和标记子字符串
【发布时间】:2020-04-07 00:31:30
【问题描述】:

我想在我的查询中添加一个具有二进制是/否的列,具体取决于是否可以在另一列的任何位置找到子字符串。

示例:我想查找 TTY 并将它们标记在新列中:

Name | ...... | Flag_Column

TestTTY123          Yes
Test-test           No
TTY111              Yes
11TTY11             Yes
Test-tube           No
Test-TTY            Yes

对不起,如果问题很简单,我已经尝试寻找解决方案,但似乎比我遇到的问题更具体。

我试过了

case when INSTR(NAME,'TTY') = 1 THEN 'Yes'
else 'No' 
end Flag_Column

我也在考虑使用 like 功能,但它似乎不太合适。有什么建议可以指出我缺少的明显解决方案吗?

【问题讨论】:

    标签: sql oracle substring


    【解决方案1】:

    您几乎找到了正确的解决方案。 INSTR 在匹配时并不总是返回 1,而是返回一个与它找到匹配的字符串中的位置相对应的数字。

    只需将您的查询更改为:

    case when INSTR(name,'TTY') > 0 THEN 'Yes'
    else 'No' 
    end Flag_Column
    

    【讨论】:

    • 太棒了!我觉得我很接近。非常感谢。
    【解决方案2】:

    如果您还需要考虑不区分大小写的搜索(返回 Yes 以获取 ttyTTYTtY 等值),然后 REGEXP_LIKE()

     select case when REGEXP_LIKE(name,'TTY','i') then 'Yes'
            else 'No' 
            end as Flag_Column
       from t
    

    也可以使用REGEXP_INSTR()

     select case when REGEXP_INSTR(name,'TTY',1,1,0,'i') > 0 then 'Yes'
            else 'No' 
            end as Flag_Column
       from t
    

    【讨论】:

      【解决方案3】:

      如果要求是简单的模式匹配,即使instr 也可能过于复杂。怎么样:

      case
          when name like '%TTY%' then 'Yes'
          else 'No' 
      end as flag_column
      

      为什么like 看起来不合适?

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 2013-03-05
        • 1970-01-01
        • 2020-12-04
        • 2014-02-28
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        相关资源
        最近更新 更多