如何跳过SQL LIKE查询

时间:2017-02-04 12:20:11

标签: sql

我有一个表(比如用户),其中有一个列名称。

您可能认为表结构如下所示:

-------------
name
--------------
Abdul Khalid
--------------
Abdul, Khalid
--------------
Abdul - Khalid
--------------
other names

我的问题是我可以进行一些查询来查找名称列值为#34; Abdul Khalid"(基本上是" Abdul Khalid"或" Abdul)的所有3行,Khalid"或者#34; Abdul - Khalid"如果我跳过","和#34; - "字符)。

3 个答案:

答案 0 :(得分:3)

您可以使用like

select t.*
from t
where name like 'Abdul%Khalid';

如果你想在字符串中的任何地方使用名称(但是按照那个顺序),那么就把通配符放在开头:

select t.*
from t
where name like '%Abdul%Khalid%';

如果您将值作为变量传递:

select t.*
from t
where name like replace('Abdul Khalid', ' ', '%');

答案 1 :(得分:1)

对于PostgreSQL,最好使用'〜'

 name ~ '^Abdul[ ,-]Khalid$'

或者如果你也想要在字符串的中间:

name ~ 'Abdul[ ,-]Khalid'

或者您可以对任何SQL使用translate(带索引):

translate(name, ' ,-') = 'AbdulKhalid'

答案 2 :(得分:0)

您也可以像这样使用REGEXP:

SELECT * from yourTable where name REGEXP 'Abdul( |, | - )Khalid';