0

このテーブルの他の番号ではなく、36またはいずれかで始まる番号を選択したい:375

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

私はもう試した :

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

しかし、空のセットを返します。ワイルドカードは関数では機能%しないと思いますin

私の場合、テストするプレフィックスがたくさんあるので、like演算子を使用しませんでした

4

2 に答える 2

3

単一の正規表現でそれを行うことができます:

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

いくつかの操作 (つまり、プレフィックスの再カウント) が必要ですが、OR LIKE構文よりも短くなります。

次にインデックスについてです。OR LIKE古いバージョンの MySQL は、(理由によりOR) との両方の場合にインデックスを使用しませんREGEXP。ただし、新しいバージョン (私は 5.5 でテスト済み) では、両方のケースでインデックスが使用されます。このデモを参照してください。編集: MySQL の古いバージョンではインデックスが使用される可能性があり ますが、それはまだ確認されていません (以下のコメントで、5.1 バージョンでは .5.5 のインデックスを使用していたことがわかりました)OR LIKEREGEXPOR LIKEREGEXP

于 2013-09-10T14:59:35.150 に答える
1

LIKEの代わりに使用IN:

SELECT phone FROM numbers WHERE phone LIKE "36%" OR phone LIKE "375%"
于 2013-09-10T14:57:30.373 に答える