当前位置: 首页 > 编程笔记 >

MySQL SELECT...LIKE (%)

宁锐
2023-03-14
本文向大家介绍MySQL SELECT...LIKE (%),包括了MySQL SELECT...LIKE (%)的使用技巧和注意事项,需要的朋友参考一下

示例

CREATE TABLE stack
(  id int AUTO_INCREMENT PRIMARY KEY,
   username VARCHAR(100) NOT NULL
);

INSERT stack(username) VALUES 
('admin'),('k admin'),('adm'),('a adm b'),('b XadmY c'), ('adm now'), ('not here');

任意位置的“ adm”:

SELECT * FROM stack WHERE username LIKE "%adm%";  
+----+-----------+
| id | username  |
+----+-----------+
|  1 | admin     |
|  2 | k admin   |
|  3 | adm       |
|  4 | a adm b   |
|  5 | b XadmY c |
|  6 | adm now   |
+----+-----------+

以“ adm”开头:

SELECT * FROM stack WHERE username LIKE "adm%";
+----+----------+
| id | username |
+----+----------+
|  1 | admin    |
|  3 | adm      |
|  6 | adm now  |
+----+----------+

以“ adm”结尾:

SELECT * FROM stack WHERE username LIKE "%adm"; 
+----+----------+
| id | username |
+----+----------+
|  3 | adm      |
+----+----------+

正如%一个字符LIKE条款任意数目的字符匹配,_匹配字符一个字符。例如,

SELECT * FROM stack WHERE username LIKE "adm_n"; 
+----+----------+
| id | username |
+----+----------+
|  1 | admin    |
+----+----------+

性能说明如果上有一个索引username,则

    list-paddingleft-2">
  • LIKE 'adm' 执行与`='adm'相同的操作

  • LIKE 'adm%是一个“范围”,类似于BETWEEN..AND..它可以充分利用列上的索引。

  • LIKE '%adm'(或带有前导通配符的任何变体)不能使用任何索引。因此,它将很慢。在具有许多行的表上,它可能是如此之慢,以至于毫无用处。

  • RLIKE(REGEXP)的速度往往比慢LIKE,但功能更多。

  • 虽然MySQL提供了FULLTEXT对许多类型的表和列的FULLTEXT索引,但是这些索引并不用于使用来完成查询LIKE。

 类似资料:
  • 问题内容: 我有以下查询代码: 问题是:即使存在匹配项,此查询也找不到它们。我使用此代码查看了完整的sql: 而我得到的是: (查询的最后一部分)请告诉我要更改什么? 问题答案: 您忘记了单词周围的迹象:

  • 问题内容: 我想写一个类似的查询,但它不返回任何东西: -它不起作用。 完美地工作。 这是我的代码: 问题答案: Spring数据JPA查询需要“%”字符以及查询中的空格字符,如 。 cf. http://docs.spring.io/spring- data/jpa/docs/current/reference/html 。 您可能希望完全摆脱注释,因为它看起来类似于标准查询(由spring数据

  • 问题内容: 在命名查询的where子句中可能有一个like?我正在尝试执行以下操作,但出现异常 我尝试像在普通SQL中那样添加%,但是得到了异常编译。 任何指针,不胜感激! 谢谢 问题答案: 您不能在中添加%,但可以在为其分配参数的值中包含它。 如:

  • 问题内容: 我有一个争论,我这样说道: 但它似乎不起作用。 我是sqlite的新手,请告诉我如何解决它。谢谢 ! 问题答案: 将通配符应用于参数,而不是SQL: 在SQL参数插值增加了报价给你,所以你的查询结束的,这不是有效的SQL。

  • 问题内容: 通配符*只能在单词的末尾使用,例如。 我想用like查询,该怎么做? 问题答案: Lucene提供了ReverseStringFilter,它允许执行通配符搜索,例如* user。它通过以相反顺序索引所有术语来工作。 但是我认为没有办法做类似’LIKE%user%’的事情。

  • 问题内容: 我正在尝试在CrudRepository中创建一个方法,该方法将向我提供用户列表,其用户名类似于输入参数(不仅以它开头,还包含它)。我尝试使用method,但是正如Spring文档中所述,此方法等于“ ”。这对我不利,因为我已经告诉过我我试图让所有用户名包含…的用户 我对该方法写了一个查询,但它甚至没有部署。 有人可以帮我吗? 问题答案: 尝试使用以下方法(对我有用): 注意:JPQL

  • 问题内容: 查询代码和查询: 返回一个空值。 通过基本调试,我发现了它的第三个绑定,即问题 我尝试了各种变体,其中最明智的似乎是在使用: 但这不起作用,因为我错过了连接字符串的任一侧,所以我尝试: 但我似乎无法找到一种方法使它们起作用。 我想念什么? 问题答案: 首先,占位符(那些占位符)仅用于 列值 ,而不用于表名,列名,SQL函数/子句等。最好改用。其次,你应该 不 引用占位符一样,它只会ma

  • 问题内容: 我已经成功实现了Ignited-Datatables。但是,在输入“非拉丁”字符(如“İ,ş,ğ,..”)时使用数据库进行搜索时 详细信息是: 部件会根据您键入的非拉丁字符而变化。 有解决的办法吗? 问题答案: 我解决了这个问题。似乎是DATETIME字段导致了问题。 给出错误。当我删除局部字段时,再也没有错误。我希望这有帮助。