SQL解惑-如何从字符串中获取IP地址
mhr18 2024-10-13 03:33 25 浏览 0 评论
SQL问题
您还在为怎么使用SQL从字符串中抽取IP地址发愁吗?某国企的兄弟通过自己的努力可以使用9种不同的方法,从字符串中获取IP地址。
SQL问题:请查询hsql.c_ip表中客户的IP地址,显示格式:cons_id,ip(IP地址示例: 192.168.1.1)
客户IP信息表 (hsql.c_ip) ,表结构及测试数据:
create table hsql.c_ip(
cons_id number,
c_ip varchar2(100)
);
insert into hsql.c_ip (CONS_ID, C_IP) values (88, '192.168.1.1');
insert into hsql.c_ip (CONS_ID, C_IP) values (999, '192.1683.1.100');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000002, '1#192.168.10.115#1');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000003, '12#192.168.1.115#12');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000004, '123#192.16.1.115#123');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000005, '1234#192.16.111.115#1234');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000006, '12345#192.6.111.115#12345');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000007, '123456#193.16.111.115#123456');
insert into hsql.c_ip (CONS_ID, C_IP) values (1000008, '1234567#191.16.111.115#1234567');
commit;
业务需求
2016年全国部分企业进行了Oracle SCN隐患治理工作,SCN隐患主要是由于DBLINK “污染”造成,梳理Oracle数据库DBLINK使用逻辑成为了主要工作之一,方法之一就是整理dba_db_links 表HOST字段中记录的对端IP地址,如何从HOST记录的字符串中提取对端IP地址,成为需要解决的问题?
SQL解惑
方法一 正向查找位置
select c_ip,
--instr(c_ip, '#', 1, 1),
--instr(c_ip, '#', 1, 2),
substr(c_ip,
instr(c_ip, '#', 1, 1) + 1,
instr(c_ip, '#', 1, 2) - instr(c_ip, '#', 1, 1) - 1)
from hsql.c_ip;
方法二 反向查找位置
select c_ip,
instr(c_ip, '#', 1, 1),
instr(c_ip, '#', -1),
substr(
c_ip,instr(c_ip, '#', 1, 1)+1,instr(c_ip, '#', -1)-instr(c_ip, '#', 1, 1)-1
),
--instr(c_ip, '#', 1, 2),
from hsql.c_ip;
方法三 降级查询(嵌套函数使用)
select c.cons_id,
substr(substr(c_ip, instr(c_ip, '#') + 1, length(c_ip)),
0,
instr(substr(c_ip, instr(c_ip, '#') + 1, length(c_ip)), '#') - 1) ip
from hsql.c_ip c;
方法四 子表查询
select c_ip,substr(c_ip,c_start+1,c_end-c_start-1),c_start,c_end from (
select c_ip,instr(c_ip,'#',1,1) c_start,instr(c_ip,'#',1,2) c_end from hsql.c_ip
);
方法五 正则表达式1
select t.c_ip,regexp_substr(t.c_ip,'[1-9]*[.][1-9]*[.][0-9]*[.][1-9]*') c_IP from hsql.c_ip t;
方法六 正则表达式2
select t.c_ip,regexp_substr(t.c_ip,'([0-9]*[.]){3}[1-9]*') c_IP from hsql.c_ip t;
方法七 正则表达式3
select t.c_ip,regexp_substr(t.c_ip,'(\d*[.]){3}\d*') c_IP from hsql.c_ip t;
方法八 自定义函数
函数:
create or replace function getIp(v_ip in varchar2) return varchar2 is
Result varchar2(200);
begin
select regexp_substr(v_ip,'(\d*[.]){3}\d*') into Result from dual;
return(Result);
end getIp;
测试方法:
select p.cons_id, p.c_ip,getip(p.c_ip) from hsql.c_ip p where p.cons_id=1000002;
方法九 视图法
create view hsql.v_c_ip as
select p.cons_id cons_id,p.c_ip c_ip,regexp_substr(p.c_ip,'(\d*[.]){3}\d*') ip from hsql.c_ip p;
测试方法:
select tt.cons_id, tt.ip from hsql.v_c_ip tt;
相关推荐
- Java安全-Java Vuls(Fastjson、Weblogic漏洞复现)
-
复现几个Java的漏洞,文章会分多篇这是第一篇,文章会分组件和中间件两个角度进行漏洞复现复现使用环境VulhubVulFocus组件Fastjson1.2.24反序列化RCEFastJson...
- 电影业的数据泄露灾难剧:黑客公开索尼影业泄露文件清单
-
自称GOP(代表GuardiansofPeace,和平卫士)的黑客组织近日入侵了索尼影业的计算机网络,在索尼雇员的电脑屏幕上弹出一个骷髅头像(题图)。黑客还劫持了索尼影业几部电影的Twitter账...
- 黑客入侵系统第一步“信息收集”过程详解
-
记一次黑客大牛的信息收集,不看后悔!!!1.操作系统收集方法操作系统:Windows和Linux大小写敏感Windows大小写不敏感:如果一个文件存在大小写,名字一致,在Windows上面,它是一个...
- 黑客暗示攻击索尼影业借助内部人员的配合
-
本周一,由于自称“和平卫士”(GOP)的黑客组织发起的攻击,索尼影业被迫关闭其企业网络。和平卫士通过劫持索尼雇员的工作站以威胁这个娱乐巨头。最新的消息显示,和平卫士通过物理访问索尼网络以获得攻击的成功...
- 全网首发!马士兵内部共享—1658页《Java面试突击核心讲》
-
又是一年一度的“金九银十”秋招大热门,为助力广大程序员朋友“面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》!注:这份神技是由内部十余名Ja...
- 国产化红利到底在哪?好多人都在瞎折腾
-
单位信创改造折腾了足足三轮,当中科可控的天阔T40扔给过来时,原本准备通宵改代码的手突然闲了——这货居然直接跑起了Oracle数据库,连驱动都不用重装!这场国产替代马拉松,C86路线的生态碾压局才是隐...
- 重庆移动营业库闪存阵列上线(重庆移动专项营业厅)
-
本报讯为更好地提供系统支撑能力、保障业务连续性,近日,重庆移动上线营业库全闪存阵列,实施底层硬件平台的升级。据悉,重庆移动引进了EMC最新的XtremIO全闪存存储阵列技术。通过传输中心的大力配合,打...
- 对不起委内瑞拉 你的钱一文不值(2021委内瑞拉还欠多少钱)
-
报道,委内瑞拉的经济正在崩溃。该国的货币玻利瓦尔,已经一文不值。就在一个月前,1美元可兑换279玻利瓦尔,对于委内瑞拉来说,这已经很凄凉了。但是,根据非官方汇率,眼下1美元可兑换408玻利瓦尔。反过来...
- 国产数据库的AWR差在哪了?(国产数据库对比)
-
昨天我发了篇文章,是因为一大早看到有个客户发来让我帮忙分析的一份AWR报告。几分钟看完,就基本上抓住了主要问题。整个过程行云流水,点点深入,用来分析问题十分顺畅。而阅读国产数据库的所谓的“AWR报...
- 印度:圣烟、后殖民贵族和带枪的舞者
-
印度是神庙的海洋。无论豪街陋巷,狭窄小径,均能见到不同规模、精致粗糙不一的神庙,有的甚至只有垃圾桶这么大,摆在路口。虔诚的教徒经过这里会停下来,躬身摸一下雕像,再用沾了神性的手点下自己的眉心,继续上路...
- 盘点Java中最没用的知识⑧:这3个过时套路,你还在代码里硬撑?
-
一、Vector与Hashtable:“线程安全”的过时标签,为何成了性能绊脚石?你是否在老代码里见过"Vector.add()"或"Hashtable.get()"这...
- 全面学习 MySQL 基础知识(mysql基础知识总结)
-
MySQL是一种关系型数据库管理系统,它被广泛应用于各种类型的应用程序中,包括Web应用程序、企业应用程序、移动应用程序等等。MySQL的优点包括高性能、可靠性、扩展性和安全性。本篇教程将介绍MyS...
- 企业电商平台销售商品收入确认会计处理指南
-
(以新收入准则IFRS15/ASC606为基础,结合天猫、京东、拼多多等平台场景)一、自营店铺销售场景案例:某企业天猫旗舰店销售商品100件,单价200元,客户支付后平台扣减5%服务费,商品控制权...
- 制作分班查询系统必备软件,轻松解决分班查询烦恼
-
常用的分班查询系统制作工具有以下几种:1.编程语言和框架:使用编程语言和相关的框架,如Java、Python、PHP等,可以自行开发分班查询系统。这种方式可以根据学校的具体需求进行定制开发,灵活性较...
- Mybatis框架学习指南-第二节内容(mybatis框架的主要配置)
-
Mybatis的一级缓存和二级缓存MyBatis内置了一个强大的事务性查询缓存机制,通过它能够方便的配置和定制。默认情况下MyBatis默认定义了两级缓存,而且为了提高扩展性,定义了缓存接口Ca...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)