【问题标题】:PLSQL check two string if a substring exist in both string如果两个字符串中都存在子字符串,PLSQL 检查两个字符串
【发布时间】:2021-06-02 01:56:43
【问题描述】:

我有一个来自下面参数表 varchar 列的预定义值。

'ENGR 包装类型、文件类型、产品类型、材料类型、包装代码'

所以每当我收到这样的状态消息时

'包装代码“F075”未找到'

我想用参数表中的列检查一下, 那么我想要一个 plsql 案例,条件是如果参数表中存在字符串, 它将返回 'TRUE' 否则返回 'FALSE'。

但下面我的 PLSQL 查询不起作用。

select CASE WHEN INSTR(upper('PACKAGE CODE "F075" NOT FOUND'), 'ENGR PACKAGE TYPE,DOCUMENT TYPE,PRODUCT TYPE,MATERIAL TYPE,PACKAGE CODE') > 0 THEN
                'TRUE'
            ELSE 'FALSE'
END SAMPLE from dual;

希望你能帮助我

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您的查询将通过以下方式返回True

    select 
        case 
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'PACKAGE CODE') > 0 then
                'TRUE'
            else 
                'FALSE'
        end sample 
    from 
        dual;
    

    如果您想将所有变体检查为常量值,请使用以下查询

    select 
        case 
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'PACKAGE CODE') > 0 then
                'TRUE'
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'ENGR PACKAGE TYPE') > 0 then
                'TRUE'
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'DOCUMENT TYPE') > 0 then
                'TRUE'
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'PRODUCT TYPE') > 0 then
                'TRUE'
            when instr(upper('PACKAGE CODE "F075" NOT FOUND'), 'MATERIAL TYPE') > 0 then
                'TRUE'
            else 
                'FALSE'
        end sample 
    from 
        dual;
    

    【讨论】:

      【解决方案2】:

      另一种选择:

      SQL> with
        2  sample (col) as
        3    (select 'PACKAGE CODE "F075" NOT FOUND' from dual),
        4  param (col) as
        5    (select * from table(sys.odcivarchar2list('ENGR PACKAGE TYPE','DOCUMENT TYPE','PRODUCT TYPE','MATERIAL TYPE','PACKAGE CODE')))
        6  select max(case when instr(s.col, p.col) > 0 then 'true'
        7                  else 'false'
        8             end) as result
        9  from sample s cross join param p;
      
      RESUL
      -----
      true
      
      SQL>
      

      【讨论】:

        【解决方案3】:

        使用正则表达式之类的函数来解决这个问题。感觉就像一个魅力。

        select CASE WHEN regexp_like(upper('Case Outline PACKAGE CODE "948H-01" not found'), 'ENGR PACKAGE TYPE|DOCUMENT TYPE|PRODUCT TYPE|MATERIAL TYPE|PACKAGE CODE')
        THEN 'TRUE'
        ELSE 'FALSE' END from dual;
        

        【讨论】:

          猜你喜欢
          • 2021-11-28
          • 1970-01-01
          • 2014-12-07
          • 1970-01-01
          • 2013-01-20
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 2011-03-23
          相关资源
          最近更新 更多