首页 > 社区问答列表 >替换使用SQL的逗号分隔列表中的特定值

  替换使用SQL的逗号分隔列表中的特定值

我需要在逗号分隔的列表中替换特定的值。

例如,假设我有列名为Tags的列,填充如下内容:Holidays, Holidays 2023, Test。

我只需要将单词'Holidays'替换为'Holiday',但是我不希望将'Holidays 2023'替换为'Holiday 2023'。

我尝试使用replace函数和WHERE子句中的LIKE,但是它不起作用。我正在使用PHP作为后端,但是我不知道如何避免这种情况。

以下是我使用的SQL:

UPDATE Expenses SET Tags = REPLACE(Tags, :original, :replace), Updated_date = :update_date WHERE Id_user = :id_user AND Tags LIKE :original_like

  • :original contain the list: Holidays, Holidays 2023, Test
  • :replace contain only the word Holiday


P粉248602298
P粉248602298

  • P粉180844619
  • P粉180844619   采纳为最佳   2023-08-09 16:23:28 1楼

    在您的值之前添加一个前导逗号和空格,然后添加一个尾随逗号-然后将其中的, Holidays, 替换为 , Holiday,。
    n在之后再次删除结果中的前导和尾随逗号

    SELECT TRIM(',' FROM REPLACE(CONCAT(', ', Tags, ','), ', Holidays,', ', Holiday,'))

    使用特定值示例 No Holidays, Holidays, Holidays 2023, Holidays, Test, Holidays inserted directly instead of getting it from the 直接插入而不是从标签列中获取的假期 column:

    SELECT TRIM(',' FROM REPLACE(
      CONCAT(', ', 'No Holidays, Holidays, Holidays 2023, Holidays, Test, Holidays', ','),
      ', Holidays,',
      ', Holiday,')
    )

    会导致的结果为:

    No Holidays, Holiday, Holidays 2023, Holiday, Test, Holiday

    +0 添加回复