代码之家  ›  专栏  ›  技术社区  ›  hud

从查询中删除/反斜杠以在oracle中获取有效数据

  •  0
  • hud  · 技术社区  · 3 年前

    通过我的最新查询,我得到的数据如下 ABDD_1037/ .但我不想要有 / 在里面。

    我尝试了以下查询,但不起作用

    SELECT TO_CHAR(RJ_INTRACITY_LINK_ID) AS SPAN_ID, 
           TO_CHAR(RJ_MAINTENANCE_ZONE_CODE) AS  MAINT_ZONE_CODE
      FROM NE.MV_SPAN@DB_LINK_NE_VIEWER
                      --   FROM  APP_FTTX.span@SAT
     WHERE LENGTH(RJ_INTRACITY_LINK_ID) > 8 
       AND LENGTH(RJ_INTRACITY_LINK_ID) < 21            
       AND INVENTORY_STATUS_CODE = 'IPL' 
       AND RJ_MAINTENANCE_ZONE_CODE = 'INUEABDD01'
       AND NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9|31|4|7|_____|U|[\/]$)','i')
     MINUS         
    SELECT TO_CHAR(LINK_ID) AS SPAN_ID,
           TO_CHAR(MAINTENANCEZONECODE) AS MAINT_ZONE_CODE
      FROM TBL_FIBER_INV_JOBS
     WHERE SPAN_TYPE = 'INTRACITY'
       AND MAINTENANCEZONECODE = 'INUEABDD01'
     ORDER BY 1;
    

    更新

    如果我注释整个正则表达式行,我会得到所有不需要的数据,如下所示

    `ABDD_0102_U`, `ABDD_1037/`,`ABDD_3102`, `ABDD_4003`, `STHU_9032`,
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   Alex Poole    3 年前

    目前你的模式:

    '_(9|31|4|7|_____|U|[\/]$'
    

    将匹配包含以下内容的任何值 _9 , _31 , _4 , _7 , ______ (六个下划线), _U _u 任何地方;或者以结尾 _/ (或 _<backslash> ,我想你不是故意的)。

    如果你想让它匹配以结尾的值 _<someting>/ 那么你需要考虑<某物>部分,例如:

    '_(9|31|4|7|_____|U|.*/$)'
    

    如果你想让它与值匹配 / 在任何地方,而不仅仅是在末尾和下划线之后,你需要将其与下划线前缀分开并删除$anchor,例如:

    '(_(9|31|4|7|_____|U)|/)'
    

    db<>fiddle