SQL命令中的LIKE无法按预期工作?

时间:2018-09-04 06:42:33

标签: sql

那是我的数据库表

--------------------------------
| Product name |    category   |
| Item 1       |   14*#*2*#*1  | 
| Item 2       |   1*#*5*#*14  | 
| Item 3       |   2*#*21*#*5  |
| Item 4       |   5*#*51*#*25 | 
| Item 5       | 100*#*212*#*25| 
| Item 6       | 212*#*55*#*651|
---------------------------------

当我们运行SQL查询

SELECT * FROM product WHERE category LIKE '%1%'

它提供以下输出:

--------------------------------
| Product name | category      |
| Item 1       | 14*#*2*#*1    | 
| Item 2       | 1*#*5*#*14    |
| Item 3       | 2*#*21*#*5    |
| Item 4       | 5*#*51*#*25   |
| Item 5       |100*#*212*#*25 |
| Item 6       |212*#*55*#*651 |
--------------------------------

但是我想要以下结果:

-------------------------------
| Product name  |   category  |
| Item 1        | 14*#*2*#*1  |
| Item 2        | 1*#*5*#*14  |
-------------------------------

4 个答案:

答案 0 :(得分:3)

这是一个可怕的数据结构,如果可以的话,应该修复它。 SQL具有存储事物列表的好方法。它称为,而不是列。

有时候,我们会被别人的非常,非常,非常非常糟糕的决定所束缚。在这种情况下,您可以像这样使用like

SELECT p.*
FROM product p
WHERE '*#*' || p.category || '*#*' LIKE '%*#*1*#*%';

请注意,||是用于字符串连接的ANSI / ISO标准。并非所有的数据库都支持此方法。您可能有另一种选择。

答案 1 :(得分:1)

您可以这样做:

SELECT * 
FROM   product 
WHERE  category LIKE '1*#*%'
    or category LIKE '%*#*1*#*%'
    or category LIKE '%*#*1%'

但是不要存储这样的数据,每行存储一个类别。查询将执行得更好,并使一切变得更容易。

答案 2 :(得分:1)

我们可以像这样使用'LIKE'关键字

选择*从产品类别='1'或(类别LIKE'%1,%'和类别LIKE'%,1%')或类别LIKE'%,1'或类别LIKE'1,% '

答案 3 :(得分:-1)

如果要获取2条记录,可以使用此记录。

SELECT * FROM product WHERE category LIKE '%1%' limit 2