我有一个表(比如用户),其中有一个列名称。
您可能认为表结构如下所示:
-------------
name
--------------
Abdul Khalid
--------------
Abdul, Khalid
--------------
Abdul - Khalid
--------------
other names
我的问题是我可以进行一些查询来查找名称列值为#34; Abdul Khalid"(基本上是" Abdul Khalid"或" Abdul)的所有3行,Khalid"或者#34; Abdul - Khalid"如果我跳过","和#34; - "字符)。
答案 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';