如何在表的两个字段之一中搜索子字符串

时间:2014-10-24 01:43:08

标签: mysql sql

我有一个包含三列的表:idfirstlast

我想找到SAM' SAM的所有记录。是在第一个或最后一个领域。

我不是MySQL的专家,但在我看来,可以使用LIKE运算符查询一个字段。

如何在查询中使用LIKE同时从两列中获取数据?

我试过这个:

SELECT id 
FROM `employees` 
WHERE 'first' like 'SAM' OR 'last' like 'SAM'

但是我得到了消息"你的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获得正确的语法。"

2 个答案:

答案 0 :(得分:1)

我在您发布的查询中看不到任何语法错误。你所拥有的非常接近。

您的查询不是要比较列的内容;它比较字符串文字,因为单引号,这些是字符串,而不是列引用。

LIKE比较相当于相等比较,因为右侧字符串中没有任何通配符。 '%'字符是一个匹配任意数量字符的通配符。

要返回列firstlast中包含字符串" SAM"的行,您可以执行以下操作:

SELECT e.id FROM employees e WHERE e.first LIKE '%SAM%' OR e.last LIKE '%SAM%'

该查询将匹配以下任何示例行:

id  first      last
--  ---------  -------
 2  Flotsam   
 3  Samson 
 5  Sesame 
 7  Yosemite   Sam

答案 1 :(得分:1)

我似乎无法弄清楚为什么会出现语法错误,但查询的一个问题是,在列名称周围加上单引号会导致它被视为字符串文字而不是列名。

我的意思是,不是将first列中的值与字符串'SAM'进行比较,而是比较两个字符串,'first'和'SAM'是不同的。此查询将不返回任何结果。

此外,只有当名字或姓氏等于sam时,这才有效。要在任何点检查这些字符作为子字符串,我会在字符串的前面和后面添加通配符。

试试这个:

SELECT id
FROM employees
WHERE first LIKE '%SAM%' OR last LIKE '%SAM%'

这是一个SQL Fiddle来展示它是如何运作的。