我在表中有以下数据:
+----------------------+----------------------------------------------------------+--------------+
| subscriber_fields_id | name | field_type |
+----------------------+----------------------------------------------------------+--------------+
| 143 | Peshawar/Islamabad/Lahore/Swat/Mardan/Karachi | Job Location |
| 146 | Karachi | Job Location |
| 147 | Lahore and Karachi | Job Location |
| 149 | Karachi, Mirpur Khas, Sukkur, Layyah, Gilgit, Charsaddah | Job Location |
| 152 | Islamabad or Lahore | Job Location |
| 155 | Islamabad | Job Location |
| 157 | 7 Districts of Sindh and Karachi | Job Location |
+----------------------+----------------------------------------------------------+--------------+
我的问题是:
select * from subscriberfields
where name like '%Khairpur,Islamabad,Karachi%';
结果:
+----------------------+-----------------------------------------------+--------------+
| subscriber_fields_id | name | field_type |
+----------------------+-----------------------------------------------+--------------+
| 143 | Peshawar/Islamabad/Lahore/Swat/Mardan/Karachi | Job Location |
| 152 | Islamabad or Lahore | Job Location |
| 155 | Islamabad | Job Location |
+----------------------+-----------------------------------------------+--------------+
它应该返回名称中包含Islamabad、海尔布尔或卡拉奇的所有行。
5条答案
按热度按时间frebpwbc1#
对于一个合适的解决方案,要么normalize your database design,要么考虑full text search。
要快速解决手头的问题,请使用正则表达式匹配(
~
)或三个简单的LIKE
表达式:或者:
或者使用
~*
或ILIKE
进行不区分大小写的匹配。因为另一个答案暗示了这一点:never use
SIMILAR TO
:kuuvgm7e2#
您可以使用以下命令:
https://postgres.cz/wiki/PostgreSQL_SQL_Tricks#LIKE_to_list_of_patterns
6ie5vjzr3#
尝试使用
SIMILAR TO
,如下所示:此外,您还应该阅读数据库规范化。你的设计可以而且应该改进。
nxagd54h4#
在MySQL中尝试使用正则表达式“REGEXP”和运算符|它的工作原理类似于OR:
因此,您将获得至少包含这些单词中的一个的结果。
或者,如果您想要包含所有单词的结果,请用途:
在服务器版本10 MariaDB和PHP 8上使用MySQL
如果您想了解更多关于REGEXP的信息,请尝试:
https://www.geeksforgeeks.org/mysql-regular-expressions-regexp/https://www.freecodecamp.org/news/sql-contains-string-sql-regex-example-query/
有很多博客都提供了REGEXP示例,但并不是每个人都能给予您可以使用的所有模式和值,但对于初学者来说,请看看这些。
23c0lvtd5#
在WHERE子句中使用OR,例如,
希望能成功。