首页 > 解决方案 > MySQL - 基于行替换字符串的一部分

问题描述

所以我有一张桌子。为了简化,我会说它有namecategory列。

一些例子:

name            category
Juice: Apple    3
Beer: Miller    4   
Cat Food        9
Juice           0
Beer: Molson    4
Juice: Orange   3
Dog Food        9
Beer            0

我想做的是格式化一个可以找到 all 的查询,category = 0然后从其他结果中删除那些后跟冒号的名称(如果它们包含它们)。见下文:

name            category
Apple           3    <- Instead of Juice: Apple
Miller          4    <- Instead of Beer: Miller
Cat Food        9
Juice           0
Molson          4    <- Instead of Beer: Molson
Orange          3    <- Instead of Juice: Orange
Dog Food        9
Beer            0

这可能吗?

谢谢!

编辑:我发现以下工作 - 这是一个坏方法吗?

SELECT
    category,
    REGEXP_REPLACE(
        name,
        CONCAT( '(', ( SELECT GROUP_CONCAT(  name SEPARATOR '|' ) FROM items WHERE category = 0 ), '): ' ),
        ''
    ) AS name
FROM
    tablename;

标签: mysql

解决方案


如果我没有误解,这样的事情不会起作用吗?

SELECT
    SUBSTRING_INDEX(tablename.name, ': ', -1) as name,
    `tablename`.`category`
FROM
    `tablename`

演示


推荐阅读