【发布时间】:2026-01-20 01:50:01
【问题描述】:
我在数据库中有标签列,用逗号分隔:“绿色、大、强”。我知道这不是在数据库中存储标签的最佳方式,我稍后会更改它,但现在我真的需要找出如何获取具有特殊标签的行。 例如,在第一行列标签是“绿色、大、强”。第二行是“白色,大,强y”。 当我使用
"SELECT * FROM tablename WHERE tags LIKE '%strong%'"
它返回第一列和第二列(因为strongy),但我只需要第一列
【问题讨论】:
我在数据库中有标签列,用逗号分隔:“绿色、大、强”。我知道这不是在数据库中存储标签的最佳方式,我稍后会更改它,但现在我真的需要找出如何获取具有特殊标签的行。 例如,在第一行列标签是“绿色、大、强”。第二行是“白色,大,强y”。 当我使用
"SELECT * FROM tablename WHERE tags LIKE '%strong%'"
它返回第一列和第二列(因为strongy),但我只需要第一列
【问题讨论】:
我会这样做:
SELECT *
FROM tablename
WHERE ',' || tags || ',' LIKE '%,strong,%';
也就是说,只需添加分隔符,这样搜索就不会产生歧义。
【讨论】:
像这样将输出限制为 1:
SELECT * FROM tablename WHERE tags LIKE '%strong%' LIMIT 1
还可以按 ID 等特定列排序,如下所示:
SELECT * FROM tablename WHERE tags LIKE '%strong%' ORDER BY column_name LIMIT 1
与 LIKE 一起使用时,括号指定范围。您可以使用 ESCAPE 关键字。
WHERE mycol LIKE '%\[126\]%' ESCAPE '\';
当然,如果你想匹配一个精确的字符串,你就不需要 LIKE,或者你可以去掉 % 字符,LIKE 会表现得像 =(这样可以灵活地将通配符或精确匹配传递给参数)。
【讨论】: