2016-11-09 60 views
0

这样做的最好方法是什么?mysql where IN语句使用正则表达式?

select * from myTable where hostname IN ('host1-%', 'host2-%', 'host3-%') 

其中主机名有时回来为完全合格的域名或简单,只是主机1

+1

'其中hostname LIKE 'host1-%' 或主机名LIKE '%host2-' 或主机名LIKE '主机3 - %'' – RiggsFolly

回答

2

这是否你想要做什么

select * from myTable where hostname REGEXP '^host[123]-' 

select * from myTable where hostname REGEXP '^host[1-3]-' 
+1

你需要''^停泊在开始的时候,你不最后需要'。*'。 – Barmar

+0

感谢您发现 - 错过了剪切和粘贴^并自动将%转换为*而无需考虑它。 – PaulF

1

为了增加PaulF的回答,你可能需要结合使用LIKEREGEXP,例如

SELECT * FROM myTable 
WHERE hostname LIKE 'host%' AND hostname REGEXP '^host[1-3]-' 

这是因为处理REGEXP时,MySQL不会使用索引的,但是当图案具有恒定的前缀,它会用它LIKE。因此,如果在hostname列中有索引,则将使用索引来缩小到hostXXX,然后只需在这些行上执行正则表达式匹配。

Mysql optimization for REGEXP