搜索

首页  >  问答  >  正文

查询大量行时,什么可以替代 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粉191610580459 天前487

全部回复(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
  • 取消回复