? ? ? ? 有时候我们不需要使用一整个字段进行查询,比如,有一个字段是ip+端口的形式(例如:192.168.2.254:4433),如果我们只需要进行单纯的搜索,那么直接使用模糊查询即可,例如:
很好,太简单辣。
现在,我们来进阶使用,所谓的模糊查询。有一个函数,叫SUBSTRING_INDEX()。使用方法如下:
SUBSTRING_INDEX()函数的三个参数分别是:需要切割的字符串;切割条件;取切割完的若干字符中第n个之前的字符。我们看上面的用例,解释下即:切割'192.168.2.254:4433',遇到':'就触发切割,并且获取第一个切割规则前面的字符串。
其实在这里我们会发现,如果使用'.'作为切割规则,最后面的参数为2,即可获得"192.168",那么我们怎么倒着获取呢,其实很简单,最后的参数输入-1即可。
其实,这时候会发现,有什么用吗,无非就是截取了一下,我们回到最开始的问题。
假设,我们有两个表,这两个表就是通过ip进行左连接,并且这两个表都是ip+端口的形式(192.168.2.254:4433 <==> 192.168.2.254:3306),但是,我们只需要前面的ip,而不需要端口(存端口是其他的业务需求),此时在进行左连接匹配时,你会发现on不能用,因为他不直接相关,而此时模糊匹配也不能用,因为LIKE是使用短的去匹配长的,他俩一样长啊!在这个时候,就是SUBSTRING_INDEX的用武之地了,只要我们分别截取两个字符串,使用' : '分割,然后再获取' : '前面的内容即可。接下来我们实操一遍:
SELECT a.ip,b.url FROM c_inventory a LEFT JOIN t_configure b ON SUBSTRING_INDEX(a.ip, ':', 1) = SUBSTRING_INDEX(b.url, ':', 1);
完美,是不是很简单,又学会一个小技巧!