从查询中删除 / 反斜杠以在 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 9
、character which ends with U
,直到我能够实现它。但是当我试图在现有的正则表达式中转义 /
时,它不起作用
【参考方案1】:
目前你的模式:
'_(9|31|4|7|_____|U|[\/]$'
将匹配任何包含_9
、_31
、_4
、_7
、______
(六个下划线)、_U
或_u
的值;或以_/
结尾(或_<backslash>
,我认为您不是有意的)。
如果您希望它匹配以_<someting>/
结尾的值,那么您需要允许
'_(9|31|4|7|_____|U|.*/$)'
如果您希望它在任何位置匹配带有/
的值,而不仅仅是在末尾和下划线之后,那么您需要将其与下划线前缀分开并删除 $ 锚,例如:
'(_(9|31|4|7|_____|U)|/)'
db<>fiddle
【讨论】:
是的,现在我知道它是如何工作的了。感谢 Alex 对正则表达式的解释。以上是关于从查询中删除 / 反斜杠以在 oracle 中获取有效数据的主要内容,如果未能解决你的问题,请参考以下文章
从 php mysql 中的 csv 文件的标题中删除反斜杠“\”