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

时间:2019-11-25 22:16:40

标签: mysql sql csv

我有一列,每一行都有一个产品列表。例如:

  • 蝙蝠,球,手套
  • 蝙蝠,手套
  • 鞋子,手套

我想为每个产品创建一个新列,该列的值为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

它不起作用。请帮助

1 个答案:

答案 0 :(得分:1)

您可以使用handy MysQL function find_in_set()来检查值是否属于逗号分隔的列表:

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之间的数字,代表其位置;否则返回0(如果搜索的CSV列表为null,则返回null)。因此,基本上,要检查某个值是否属于CSV列表,您只需检查find_in_set()返回的值是否严格高于0