mysql中一张表里有srcip和dstip,查出这两个ip中包含的ip
时间: 2023-07-28 12:10:04 浏览: 293
可以使用MySQL中的正则表达式函数来匹配IP地址。具体操作如下:
1. 将srcip和dstip合并成一个字段,方便匹配:
```
SELECT CONCAT(srcip, ',', dstip) AS ip FROM table_name;
```
2. 使用正则表达式匹配IP地址:
```
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(ip, ',', n), ',', -1) AS matched_ip
FROM (
SELECT CONCAT(srcip, ',', dstip) AS ip FROM table_name
) t
JOIN (
SELECT @n := @n + 1 AS n FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) a,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) b,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) c,
(SELECT 0) d, (SELECT @n := -1) e
) numbers
ON CHAR_LENGTH(ip) - CHAR_LENGTH(REPLACE(ip, '.', '')) >= n - 1
AND SUBSTRING_INDEX(SUBSTRING_INDEX(ip, ',', n), ',', -1) REGEXP '^([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])$';
```
这里使用了一个子查询将srcip和dstip合并成一个字段,并使用了一个自定义的数字表来生成数字序列,然后使用正则表达式来匹配IP地址,并去重输出。
需要注意的是,这种方法只适用于IPv4地址,如果需要支持IPv6地址,需要使用不同的正则表达式。
阅读全文