根据 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 中的最后一个字符串的主要内容,如果未能解决你的问题,请参考以下文章