我想选择与任一数字开头36
或375
而不是其他表所示:
+-------------+
| phone |
+-------------+
| 36000000000 | <
| 37000000001 |
| 36000000002 | <
| 37500000002 | <
| 34000000002 |
| 33000000002 |
+-------------+
我试过了 :
select phone from numbers where phone in ( "36%", "375%" );
但它返回一个空集,我猜通配符%
不适用于该in
功能
就我而言,我要测试很多前缀,这就是为什么我不使用like
运算符的原因
您可以通过单个正则表达式来做到这一点:
SELECT phone FROM numbers WHERE phone REGEXP '^(36*|375*)'
仍然需要一些操作(即重新计算前缀),但比OR LIKE
语法短。
现在至于索引。旧版本的MySQL在这两种情况下都不会使用索引- OR LIKE
(由于OR
)和REGEXP
。但是新版本(我已经在5.5上进行了测试)将在两种情况下都使用index-请参见此演示。编辑:可能 OR LIKE
会在旧版本的MySQL中使用索引,而不是REGEXP
-仍有待检查(在下面的注释中,我们发现5.1版本的索引使用OR LIKE
。的REGEXP
索引用于5.5)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句