3

我将如何使用带有类似功能的 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 列”

4

3 回答 3

10

您可以使用许多 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).*";
于 2010-09-17T02:17:49.380 回答
6

没有 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%')

搜索文本时要考虑的替代方法是全文搜索 (FTS)

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

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

于 2010-09-17T02:20:20.100 回答
1

将值放在表 ( MyParamsTable) 中并LIKEJOIN条件中使用,例如:

SELECT fields 
  FROM table 
       INNER JOIN MyParamsTable
          ON table.name LIKE CONCAT(MyParamsTable.name, "%")
 WHERE age = "50";
于 2010-09-17T07:52:49.263 回答