根据 PL/SQL 中的特定条件替换 IP-address 中的最后一个字符串

Posted

技术标签:

【中文标题】根据 PL/SQL 中的特定条件替换 IP-address 中的最后一个字符串【英文标题】:Replace last string in IP-address accornding to specific condition in PL/SQL 【发布时间】:2015-07-01 05:42:28 【问题描述】:

我有包含字段和值的表格:

 ENTADDR (VARCHAR2) ENTIFINDEX (VARCHAR2)
18.17.16.2 1
18.17.16.53 2
18.17.16.1 3
18.17.16.54 4

我必须加入第一个和第三个记录,知道第一个 ENTADDR。 那么如何从 18.17.16.2 得到 18.17.16.1 呢? (最后一个字符 -1)。同样,我必须知道第二个ENTADDR(18.17.16.53的18.17.16.54,即最后一个字符+1)加入第二个和第四个记录

所以我需要像这样的“选择”:

选择 表 1 中的 ENTIFINDEX 其中 'ENTADDR 的一些转换(更改最后一个字符) '= ENTADDR

谢谢指教!!

【问题讨论】:

您的预期输出是什么?提供更多信息。 加入是什么意思?请提供您在表格中提到的数据所需的示例输出 【参考方案1】:

这是你在看的东西

SQL> select concat (substr('18.17.16.2',1,9),substr ('18.17.16.2',-1)-1 ) as "concat val" from dual;

concat val
----------
18.17.16.1

【讨论】:

【参考方案2】:

选择 concat(left(ENTADDR,locate('.',ENTADDR,locate('.',ENTADDR,locate('.',ENTADDR)+1)+1)),right(ENTADDR,length(ENTADDR) -locate('.',ENTADDR,locate('.',ENTADDR,locate('.',ENTADDR)+1)+1))-ENTIFINDEX) 作为表中的 ipminusone

搜索第一个第二个和第三个'.'然后从IP的最后部分减去ENTIFINDEX的值

如果您打算经常这样做,您也可以使用存储过程来执行此操作。

【讨论】:

以上是关于根据 PL/SQL 中的特定条件替换 IP-address 中的最后一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL:根据条件更新另一个表时未找到数据

替换 PL/SQL 中的特殊 XML 字符

Oracle PL/SQL - 根据条件对不同列进行选择、分组、排序、where-clause 的最佳方法?

替换 PL/SQL 中的几行正则表达式函数

检查 PL/SQL 异常块中的特定错误代码

根据条件替换R数据帧中的值[重复]