使用'like'在sql中查找整个单词

时间:2014-12-07 14:50:11

标签: mysql sql-server regex tsql sql-like

我有一个在transact-sql(微软的版本)中运行的搜索例程,它做了类似的事情:

search * from mytable
where ' ' + title + ' ' like ' %white% '

我的目标是找到单词而不是子词。我不想找到“whitener”,我只想找到包含白色的标题。

这种搜索在MySQL中不起作用。 MySQL有“like”运算符,但它的某些内容必须不同。

所以我的问题是,是否有一种通用的方法可以在t-sql和MySQL中运行。

3 个答案:

答案 0 :(得分:3)

您可以在MySQL中执行以下操作:

search * 
from mytable
where concat(' ',  title , ' ') like '% white %'

请注意,您的like模式应将通配符作为第一个和最后一个字符,而不是空格。

此配方适用于SQL Server 2012+。 LIKE(以及通配符)是标准SQL,可在两个数据库中使用。 CONCAT()也是标准SQL,但在SQL Server 2012之前的SQL Server中不可用。

答案 1 :(得分:1)

您可以执行以下操作:

SELECT * FROM `mytable` WHERE title regexp '[[:<:]]white[[:>:]]';

这是一种正则表达式,可以根据精确的字符串进行查找。

答案 2 :(得分:0)

您的T-SQL查询无法发布。我不得不修改它以获得 期望的结果:

select * from mytable
where ' ' + title + ' ' like '% white %'

请注意单个空格和百分比通配符的顺序 引号。它也是SELECT而非SEARCH

要使它在MySQL中运行,需要将查询重写为:

select * from mytable
where concat(' ', title, ' ') like '% white %';

MySQL使用CONCAT()函数实现字符串连接 传统上,T-SQL使用加号+来实现字符串连接。

MS SQL服务器支持CONCAT SQL Server 2012 以来的功能,所以如果您使用的是最新版本,请执行此操作 第二个查询应该是您需要的唯一查询。否则,我认为没有 一个简单的版本,适用于两种类型的DBMS。