多数の行をクエリする場合の LIKE 演算子の代替手段は何ですか?
P粉191610580
P粉191610580 2023-09-02 13:02:15
0
1
511
<p>次のようなランダムな文字列を格納する列を持つテーブルがあります。 <pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre> <p>列の一部のデータにはアスタリスク (*) が付きますが、他のデータにはアスタリスク (*) が付きません。 </p> <p>該当するものを選択する必要があります。私はこのクエリを使用しています: </p> <pre class="brush:php;toolbar:false;">SELECT example_id FROM example_tbl WHERE example_id LIKE ‘%*%’</pre> <p>これは通常は問題になりませんが、何百万行ものクエリを実行しているため、私の知る限りでは、LIKE 演算子がパフォーマンスに影響を与えています。クエリが完了するまでに数時間かかります</p> <p>私の質問は、LIKE 演算子の代わりに何があるかということです。 </p> <p>PS アスタリスクは常に文字列の最後にあります。役に立つかどうかわかりません</p>
P粉191610580
P粉191610580

全員に返信(1)
P粉063862561

「アスタリスクは常に最後にある」と述べたので、 を試してください。

ここで、example_id は '%*'

のようになります。 これにより、「*」で終わる値が検索されます

######または######

は、テーブルの列内の部分文字列を検索します。

これを実現する 1 つの方法は、3 つのパラメーターを取る instr() 関数を使用することです。

構文

: instr(rank, string, sub_string)

######ランキング###:###

最初の対応する位置を与える整数式 部分文字列の検索は、文字列内の文字から始まります。

String: 文字列はテキストです。

sub_string: 探している部分文字列 探している。 instr() が見つからない場合は 0 を返します。 マッチ。

これをテーブルにどのように適用すればよいでしょうか? instr()関数はx3なので適用は簡単です。

  1. : filter[ZCT] where instr(1,ALLOTEDTO,”Ram”)
  2. 0.
  3. ここで、1 は部分文字列を検索する開始位置、ALLOTEDTO は文字列で構成される列名、最後のパラメータは部分文字列そのものです。これにより、ALLOTEDTO 列に部分文字列「Ram」
  4. が含まれるテーブル内のすべてのレコードが表示されます。
これはと同等です。

ALLOTEDTO が "%Ram%" に似ている ZCT から * を選択します。

注: Instr() 関数は大文字と小文字を区別するため、常に大文字または小文字の関数を使用してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート