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

标签 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

它不起作用。请帮忙

最佳答案

您可以使用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

关于mysql - MYSQL中使用IF/CASE语句查找字符串中是否存在子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59040901/

相关文章:

sql - groupBy 在 Doctrine QueryBuilder 中使用别名

java - 用于替换符号的正则表达式

node.js - 为什么我无法在 node.js 中解析这个 CSV 文件?

php - 使用 php LOAD DATA INFILE 将 CSV 文件导入 MySQL 表

php - MySQL:如何存储/检索艺术家信息?

mysql - 将 mysql 表导出到 csv,其中数据在列中包含换行符

mysql - 使用 like vs group by 聚合函数的 SQL 查询 - 性能

php - MySQL 获取数组添加重复值?

php - 查询问题 - 查询未正确拉取

php - 设置数据库搜索输出的样式