使用IF/CASE语句查找MYSQL中的字符串中是否存在子字符串

使用IF/CASE语句查找MYSQL中的字符串中是否存在子字符串,mysql,sql,csv,Mysql,Sql,Csv,我有一个列,每行有一个产品列表。e、 g: 球棒、球、手套 球棒,手套 鞋、手套 我想为每个产品创建一个新列,该列的值为1或0,具体取决于该行中是否存在该产品 我现在正在使用以下代码: select *, CASE WHEN product_name LIKE '%bat%' THEN 1 else 0 END AS bat, CASE WHEN product_name LIKE '%gloves%' THEN 1 else 0 END AS gloves from products 它不起

我有一个列,每行有一个产品列表。e、 g:

球棒、球、手套 球棒,手套 鞋、手套 我想为每个产品创建一个新列,该列的值为1或0,具体取决于该行中是否存在该产品

我现在正在使用以下代码:

select
*,
CASE WHEN product_name LIKE '%bat%' THEN 1 else 0 END AS bat,
CASE WHEN product_name LIKE '%gloves%' THEN 1 else 0 END AS gloves
from products
它不起作用。请提供帮助

您可以使用检查值是否属于逗号分隔列表:

select
    p.*,
    find_in_set('bat', product_name) > 0 bat
    find_in_set('gloves', product_name) > 0 gloves
from products p

如果在CSV列表中找到该值,则find_in_set返回一个介于1和N之间的数字,表示其位置;否则,如果搜索的CSV列表为null,则返回0或null。因此,基本上,要检查某个值是否属于CSV列表,只需检查find_in_set返回的值是否严格高于0。

您应该阅读感谢。函数可以工作,但总是返回0。我不知道为什么。我的产品不以逗号分隔,例如:蝙蝠球。所以我在“bat”集合中查询find_,product_name。我还尝试了“%bat%”,但它不起作用