我有一个在transact-sql(微软的版本)中运行的搜索例程,它做了类似的事情:
search * from mytable
where ' ' + title + ' ' like ' %white% '
我的目标是找到单词而不是子词。我不想找到“whitener
”,我只想找到包含白色的标题。
这种搜索在MySQL中不起作用。 MySQL有“like
”运算符,但它的某些内容必须不同。
所以我的问题是,是否有一种通用的方法可以在t-sql和MySQL中运行。
答案 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。