选择与一组前缀匹配的行

时间:2013-09-10 14:55:12

标签: mysql string

我想选择以36375开头的数字,而不是此表格中的其他数字:

+-------------+
| phone       |
+-------------+
| 36000000000 |  <
| 37000000001 |
| 36000000002 |  <
| 37500000002 |  <
| 34000000002 |
| 33000000002 |
+-------------+

我试过了:

select phone from numbers where phone in ( "36%", "375%" );

但它返回一个空集,我猜通配符%不适用于in函数

在我的情况下,我有很多前缀要测试,这就是为什么我没有使用like运算符

2 个答案:

答案 0 :(得分:3)

你可以通过单一的正则表达式来实现:

SELECT phone FROM numbers WHERE phone REGEXP '^(36*|375*)'

仍需要一些操作(即重新计算前缀),但短于OR LIKE语法。

现在索引。旧版本的MySQL不会对这两种情况使用索引 - OR LIKE(因为OR)和REGEXP。但是新版本(我在5.5上测试过)将使用两种情况的索引 - 请参阅this demo。编辑:可能 OR LIKE将在旧版本的MySQL中使用索引,而不是REGEXP - 还有待检查(在下面的评论中我们发现5.1版本使用的索引for OR LIKEREGEXP使用的索引为5.5)

答案 1 :(得分:1)

使用LIKE代替IN

SELECT phone FROM numbers WHERE phone LIKE "36%" OR phone LIKE "375%"