mysql自定义函数(通过IP去数据库匹配IP区间是否包含该IP)
来源:互联网 发布:VB中打开ocx文件 编辑:程序博客网 时间:2024/05/21 19:28
mysql自定义字符串查询函数
一 函数适用处理数据格式(字段中有‘,’分割的数据,还有以’-‘连接的区间)
例1:表中字段 "53678,45672,39543-39600" 需要判断的数据 "39570"
例2:表中字段 "DD.B1.C1.A3,DD.B1.C1.A1-BA,DD.B1.C1.B0" 需要判断的数据 "DD.B1.C1.A7"
二 使用的场景
1.表中字段存储的是渠道号和渠道号的区间,去通过某一渠道查询表中的记录
2.表中字段存储的是IP地址和IP地址的区间,去通过某一IP查询表中的记录
3....
三 具体函数详解
该自定义函数用到了MySQL自带的三种函数:
LENGTH(str) 获取str字符串的长度,返回一个整数
REPLACE(str,from_str,to_str) 返回字符串str,其字符串from_str的所有出现由字符串to_str代替
SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串。
如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)
REVERSE(str) 返回颠倒字符顺序的字符串str
REVERSE(str1,str2) 返回str1与str2连接之后的字符串
a.通过分隔符分割表中字段得到的个数
CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string_total`(ip_string varchar(1000),ip_delimiter varchar(5)) RETURNS int(11)BEGIN -- Get the total number of given string. return 1+(length(ip_string) - length(replace(ip_string,ip_delimiter,'')));END
b.获取字段分割之后,指定位置的字符串
CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string`(ip_string varchar(1000),ip_delimiter varchar(5),ip_order int) RETURNS varchar(50) CHARSET utf8BEGIN -- Get the separated number of given string. declare result varchar(50) default ''; set result = reverse(substring_index(reverse(substring_index(ip_string,ip_delimiter,ip_order)),ip_delimiter,1)); return result;END
c.查询字符串,返回是否存在(1 存在 0 不存在)
CREATE DEFINER=`root`@`localhost` FUNCTION `func_ip_search`(ip_string varchar(1000),ip varchar(20)) RETURNS int(11)BEGIN -- Get the result of search.(分隔符也可以作为参数传进来)declare result varchar(50) default '';--存储分割出来的字符串declare ip_begin varchar(30) default '';--区间的左半部分declare ip_end varchar(30) default '';--区间的右半部分declare cnt int default 0;--分割的个数declare i int default 0;set cnt = func_get_split_string_total(ip_string,',');while i < cntdo set i = i + 1;set result = func_get_split_string(ip_string,',',i);if(length(result) = length(ip)) then --判断是是不是单独的(非区间)if(result = ip) thenreturn 1;end if;elseset ip_begin = func_get_split_string(result,'-',1);set ip_end = func_get_split_string(result,'-',2);set ip_end = concat(substring_index(ip_begin,'.',3),'.',ip_end);--拼接IP地址的前三位(适用于IP,可以根据需求自己修改)if(ip_begin <= ip && ip <= ip_end) then --判断字符串是否在区间内return 1;end if;end if;end while; return 0;END
总结:
第一次写自定义函数,总要是做项目的时候遇到了相关的问题,网上查了半天没有查到相关的代码。于是自己就各种查询,用了一上午时间写出来的,写的比较简单,没有进行优化,等有时间把这个东西优化一下,争取能适应各种类型;目前至少能给大家提供一个解决的思路。
注:遇到问题的时候先不要害怕,慢慢分析自己需要什么,网上能查到多少跟自己需求相关的,然后自己再各方结合实现自己的功能需求。
阅读全文
0 0
- mysql自定义函数(通过IP去数据库匹配IP区间是否包含该IP)
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
- 如何通过ip访问MySql数据库
- mysql通过ip地址无法访问数据库
- 通过IP访问MYsql
- mysql ip处理函数
- plsql通过ip链接数据库
- Mysql通过IP连接授权
- Mysql通过IP连接授权
- ip数据库可查询该IP所属的区域
- 允许别人通过ip访问本机mysql数据库
- MySQL通过IP来访问数据库的权限解决方法
- 传入一个ip地址判读该ip地址是否是正确的ip地址形式
- IP数据库
- POJ 1094:Sorting It All Out (拓扑排序)
- 项目设计需要考虑到的内容
- 关于AlertDialog的小坑
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- web.xml中taglib标签报错问题解决方案
- mysql自定义函数(通过IP去数据库匹配IP区间是否包含该IP)
- Java Web项目结构
- Swift 中的 Any、AnyHashable、AnyObject、AnyClass的区别
- 说说你对语义化的理解?
- [MYSQL -12]汇总数据
- leetcode 127. Word Ladder BFS广度优先遍历
- 水池数目
- 逻辑回归原理及推导过程
- 关于用g++编译后运行时出现的问题:无法定位程序输入点__gxx_personality_v0