搜尋

首頁  >  問答  >  主體

查詢大量行​​時,什麼可以取代 LIKE 運算子?

<p>我有一個表,其中有一列儲存隨機字串,如下所示:</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粉191610580P粉191610580499 天前525

全部回覆(1)我來回復

  • P粉063862561

    P粉0638625612023-09-03 00:00:31

    既然您提到「星號總是在最後」那麼您可以嘗試

    其中 example_id LIKE '%*'

    這將會找到以「*」結尾的任何值

    是在表格的列中搜尋子字串。

    實現它的一種方法是使用 instr() 函數,instr() 函數需要 3 個參數。

    語法:instr(rank, string, sub_string)

    排名

    1. 整數型,給出第一個對應的位置 子字串搜尋開始的字串中的字元。
    2. String:字串是您的文字。
    3. sub_string :您要尋找的子字串 正在找。如果沒有找到 instr(),則傳回 0 匹配。

    現在如何將其應用到表中?由於instr()函數是x3,因此應用起來很簡單。

    例如:過濾器[ZCT] 其中 instr(1,ALLOTEDTO,”Ram”) <> 0.

    其中1是尋找子字串的起始位置,ALLOTEDTO是由字串組成的列名,最後一個參數是子字串本身。這將為您提供表中 ALLOTEDTO 列包含子字串「Ram」的所有記錄

    這相當於。

    從 ZCT 中選擇 *,其中 ALLOTEDTO 類似於「%Ram%」。

    注意:Instr() 函數區分大小寫,因此請一律使用大寫或小寫函數。

    回覆
    0
  • 取消回覆