我有一个查询,其工作方式为:
@v='2.2.2' select version FROM app_versions as V where @v between V.min_ver and V.max_ver;
其中版本表示为格式为“x.y.z”的字符串。我写不出一个正确且可读的查询,有没有更好的mysql解决方案?
Famous test cases (min_ver -> max_ver): 1.10.1 -> 2.3.3 2.2.100 -> 2.2.111
nxowjjhe1#
如果我正确理解了这个问题,为什么不使用INET_ATON(expr),给定IPv4网络地址的四点分隔表示形式字符串,返回一个整数,该整数表示按网络字节顺序(大端)排列的地址数值。如果INET_ATON()不理解其参数,或者expr为NULL,则返回NULL
select av.* from app_versions av where INET_ATON('2.2.2') between INET_ATON(av.min_ver) and INET_ATON(av.max_ver);
https://dbfiddle.uk/btp2IhXb
1条答案
按热度按时间nxowjjhe1#
如果我正确理解了这个问题,为什么不使用INET_ATON(expr),
给定IPv4网络地址的四点分隔表示形式字符串,返回一个整数,该整数表示按网络字节顺序(大端)排列的地址数值。如果INET_ATON()不理解其参数,或者expr为NULL,则返回NULL
https://dbfiddle.uk/btp2IhXb