Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查找列类似的行_Mysql_Sql - Fatal编程技术网

Mysql SQL查找列类似的行

Mysql SQL查找列类似的行,mysql,sql,Mysql,Sql,我想查找具有特定名称的行。问题是有些行有前缀:(过时)或(过时) 因此,对于John这个名字,我可以有三行: John (OBSOLETE)John (OBSOLETE) John 我如何编写一个查询,以便在知道有时会有前缀的情况下找到与该名称匹配的所有行,我也需要这些行?您能在LIKE语句中使用SQL通配符吗 SELECT * FROM Customers WHERE Name LIKE '%John'; 要与BillyJohn不匹配,请执行以下操作: select * from

我想查找具有特定名称的行。问题是有些行有前缀:
(过时)
(过时)

因此,对于John这个名字,我可以有三行:

John
(OBSOLETE)John
(OBSOLETE) John

我如何编写一个查询,以便在知道有时会有前缀的情况下找到与该名称匹配的所有行,我也需要这些行?

您能在LIKE语句中使用SQL通配符吗

SELECT * FROM Customers WHERE Name LIKE '%John';

要与BillyJohn不匹配,请执行以下操作:

select
  *
  from T
  where ltrim(replace(fld, '(OBSOLETE)', '')) = 'John'
或者简单地说:

  where fld IN ('John', '(OBSOLETE) John', '(OBSOLETE)John')

与上面不同的是(或类似于带前导通配符的),如果存在索引,则有机会使用索引。

这可以通过正则表达式Alex实现,谢谢你的回答。如果名字里有两个词,比如“约翰·斯密特”,这行得通吗?我认为你在替换空格。它只替换前导空格,而不是单词之间的空格