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

Posted

技术标签:

【中文标题】从查询中删除 / 反斜杠以在 oracle 中获取有效数据【英文标题】:Remove / backslash from query to get valid data in oracle 【发布时间】:2021-07-08 14:32:29 【问题描述】:

通过我的最新查询,我得到的数据为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`,

【问题讨论】:

我认为您可以删除正则表达式模式中括号内的最后一个 / @AnkitBajpai:请帮助如何在正则表达式模式中删除它。!!!我试过了,但它不起作用 我没有看到您在正则表达式中使用的 NOT 运算符。 您根本不想要一个包含/ 的值;或作为最后一个字符;或者作为下划线之后的唯一字符,这是您目前正在寻找的? (顺便说一句,[\/] 将匹配其中任何一个字符,如果这是您的意图,它不会转义 /。而且下划线不是通配符,所以 _____ 看起来很奇怪。)也许可以解释一下你想要得到什么整个正则表达式,并举例说明应该和不应该匹配的内容。 @AlexPoole:通过上面的正则表达式,我已经排除了大部分不需要的东西,比如_character which ends with 9character which ends with U,直到我能够实现它。但是当我试图在现有的正则表达式中转义 / 时,它不起作用 【参考方案1】:

目前你的模式:

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

将匹配任何包含_9_31_4_7______(六个下划线)、_U_u 的值;或以_/ 结尾(或_&lt;backslash&gt;,我认为您不是有意的)。

如果您希望它匹配以_&lt;someting&gt;/ 结尾的值,那么您需要允许 部分,例如:

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

如果您希望它在任何位置匹配带有/ 的值,而不仅仅是在末尾和下划线之后,那么您需要将其与下划线前缀分开并删除 $ 锚,例如:

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

db<>fiddle

【讨论】:

是的,现在我知道它是如何工作的了。感谢 Alex 对正则表达式的解释。

以上是关于从查询中删除 / 反斜杠以在 oracle 中获取有效数据的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除反斜杠

从 php mysql 中的 csv 文件的标题中删除反斜杠“\”

如何使用redshift从字符串中删除反斜杠?

从 c# json 响应中删除双反斜杠

从字符串中删除所有反斜杠 - php - 正则表达式 [关闭]

Java 属性反斜杠