我想选择以36
或375
开头的数字,而不是此表格中的其他数字:
+-------------+
| phone |
+-------------+
| 36000000000 | <
| 37000000001 |
| 36000000002 | <
| 37500000002 | <
| 34000000002 |
| 33000000002 |
+-------------+
我试过了:
select phone from numbers where phone in ( "36%", "375%" );
但它返回一个空集,我猜通配符%
不适用于in
函数
在我的情况下,我有很多前缀要测试,这就是为什么我没有使用like
运算符
答案 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 LIKE
。REGEXP
使用的索引为5.5)
答案 1 :(得分:1)
使用LIKE
代替IN
:
SELECT phone FROM numbers WHERE phone LIKE "36%" OR phone LIKE "375%"