MySQL IN with LIKE

时间:2010-09-17 02:14:06

标签: sql mysql select where

我如何使用IN表格?所以我可以在其中使用%?在我的意思是:

SELECT fields 
  FROM table 
 WHERE age = "50" 
   AND name IN ("tim", "bob", "nancy", "john");

我已经尝试过:

SELECT fields 
  FROM table 
 WHERE age = "50" 
   AND name LIKE ("2010-09-17%", "2010-09-16%")

但它给出了错误“操作数应包含1列”

3 个答案:

答案 0 :(得分:9)

您可以使用多个LIKE表达式:

SELECT fields 
  FROM table 
  WHERE age = "50" 
        AND (
             name LIKE "2010-09-17%" 
             OR name LIKE "2010-09-16%"
            );

或者您可以使用正则表达式:

SELECT fields 
  FROM table 
 WHERE age = "50" 
       AND name REGEXP "2010-09-17.*|2010-09-16.*";

或者,聪明地

SELECT fields 
  FROM table 
 WHERE age = "50" 
       AND name REGEXP "2010-09-1(6|7).*";

答案 1 :(得分:5)

没有LIKE和IN子句的组合。它是一种语法或另一种语法:

SELECT fields
  FROM table
 WHERE age = 50
   AND (   name IN ('tim', 'bob', 'nancy', 'john')
        OR name LIKE '2010-09-17%'
        OR name LIKE '2010-09-16%')

搜索文字时要考虑的另一种方法是Full Text Search (FTS)

SELECT fields
  FROM table
 WHERE age = 50
   AND MATCH(name) AGAINST('tim bob nancy john')

...但这需要MyISAM表和全文索引。

答案 2 :(得分:1)

将值放在表格中MyParamsTable)并在LIKE条件下使用JOIN,例如类似的东西:

SELECT fields 
  FROM table 
       INNER JOIN MyParamsTable
          ON table.name LIKE CONCAT(MyParamsTable.name, "%")
 WHERE age = "50";