如何过滤存储为varchar的mysql数据库中的ip地址

Pho*_*nix 0 mysql

我有用户表,其中包含用户名和IP地址.

假设我需要IP地址在5.101.108.0和5.101.108.255之间的所有数据

当IP存储在varchar中时,如何为其编写查询.我是否需要使用正则表达式,因为我必须在5.101.108之后进行过滤.?

您能否提供样本解决方案,因为我无法思考如何过滤.谢谢.

shm*_*sel 6

您可以使用INET_ATON()INET_NTOA()转换IP字符串和整数表示:

SELECT *
  FROM ip_addresses
 WHERE INET_ATON(ip_address) BETWEEN INET_ATON('5.101.108.0') AND INET_ATON('5.101.108.255');
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,这对大型表来说会很慢,因为它必须在表中的每一行上运行`INET_ATON`计算.如果必须经常在大型表上执行此操作,最好将数据存储为"INET_ATON"以开始.(编辑:@Terry用4s击败我!) (2认同)