有没有办法根据包含逗号分隔字符串值的列值过滤表中的行?
示例:
id |类别ID
0 | 33,3332,335
1 | 334,3310,332
2 | 32,33,34
3 | 35,38,33
4 | 34,233,331
我只想获取类别 id 为
33
的行,即 0,2,3。我正在考虑像这样使用 LIKE
运算符
SELECT * FROM news WHERE categoryIds LIKE :categoryId || ',%' OR categoryIds LIKE '%,' || :categoryId OR categoryIds LIKE '%,' || :categoryId || ',%'
但显然这是不正确的。
您可以修改
LIKE
子句来处理这些情况:
SELECT * FROM news WHERE
categories = :categoryId OR -- Single value match
categories LIKE :categoryId || ',%' OR -- Starts with
categories LIKE '%,' || :categoryId OR -- Ends with
categories LIKE '%,' || :categoryId || ',%' -- In the middle
这样您就可以覆盖 :
categoryId
(在您的情况下为“33”)在逗号分隔字符串中可能具有的所有可能位置。