MySql 用一句SQL语句查询IP地址是否在列表中(支持通配符)
2017-02-07 09:42
836 查看
在MySql中先创建一函数,目前MySql自定义函数只能返回一个值,无法以表形式返回
CREATE DEFINER = 'root'@'%' FUNCTION `split`(
f_string varchar(1000),
f_delimiter varchar(100),
f_order int
)
RETURNS varchar(1000) CHARSET utf8
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare result varchar(1000) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),reverse(f_delimiter),1));
if result="" then
set result="*";
end if;
return result;
END;
SQL查询语句:
Select * from (select IP,split(IP,'.',1) as IP1,split(IP,'.',2) as IP2,split(IP,'.',3) as IP3,split(IP,'.',4) as IP4 from wx_ip_list where VoteID=20 And IsEnabled=0 ) b where (split('172.30.30.17','.',1)=IP1 or IP1='*') and (split('172.30.30.17','.',2)=IP2
or IP2='*') and (split('172.30.30.17','.',3)=IP3 or IP3='*') and (split('172.30.30.17','.',4)=IP4 or IP4='*')
CREATE DEFINER = 'root'@'%' FUNCTION `split`(
f_string varchar(1000),
f_delimiter varchar(100),
f_order int
)
RETURNS varchar(1000) CHARSET utf8
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare result varchar(1000) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),reverse(f_delimiter),1));
if result="" then
set result="*";
end if;
return result;
END;
SQL查询语句:
Select * from (select IP,split(IP,'.',1) as IP1,split(IP,'.',2) as IP2,split(IP,'.',3) as IP3,split(IP,'.',4) as IP4 from wx_ip_list where VoteID=20 And IsEnabled=0 ) b where (split('172.30.30.17','.',1)=IP1 or IP1='*') and (split('172.30.30.17','.',2)=IP2
or IP2='*') and (split('172.30.30.17','.',3)=IP3 or IP3='*') and (split('172.30.30.17','.',4)=IP4 or IP4='*')
相关文章推荐
- 关于所使用的spark版本中的spark sql不支持exists和in等子查询语句的解决方案记录
- 在oracle中查询已知表名的表中所有字段名,每个字段是否是主键,是否是外键,是否为空的sql语句
- SQL语句查询是否为空 =null及null
- 使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句
- 2013-01-23 10:13 MySQL中如何用一句SQL语句将多行多列合并成一行一列显示(转)
- 分析mysql的QueryCache在相同语义SQL是否可以使用查询缓存
- 查询ip区间的ip地址的sql语句
- mysql的sql语句中直接计算时间 查询昨天 一周前 一月前 一年前的数据的方法
- 如何知道mysql中sql语句索引是否生效
- 有效的mysql优化sql语句查询的方法
- mysql 通过sql语句查询距离范囲
- php中mysql一条sql语句查询出所有符合条件的数据,该怎么写?
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句
- PHP获取MySQL执行sql语句的查询时间方法
- MySQL中sql查询某一列数据是否以汉字或非汉字开头
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- MySQL 使用explain分析sql语句的查询效率
- MySQL 使用explain分析sql语句的查询效率(二)
- mysql 查询正在执行的事务以及等待锁 常用的sql语句