那是我的数据库表
--------------------------------
| 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 |
-------------------------------
答案 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