Заменить значение в строке через запятую в MySQL? - PullRequest
0 голосов
/ 07 ноября 2011

Предположим, у меня есть следующее значение столбца в MySQL, разделенное запятыми: foo,bar,baz,bar,foo2

Каков наилучший способ заменить все, что находится в 4-й позиции (в данном случае bar) этой строки, наbarAAA (чтобы мы изменили foo,bar,baz,bar,foo2 на foo,bar,baz,barAAA,foo2)?Обратите внимание, что bar встречается как в позиции 2, так и в позиции 4.

Я знаю, что могу использовать SUBSTRING_INDEX() в MySQL, чтобы получить значение того, что находится в позиции 4, но не смогвыяснить, как заменить значение в позиции 4 новым значением.

Мне нужно сделать это, не создавая UDF или хранимую функцию, используя только стандартные строковые функции в MySQL (http://dev.mysql.com/doc/refman/5.5/en/string-functions.html).

Ответы [ 3 ]

3 голосов
/ 22 апреля 2015

Сначала вы разбили свою проблему на две части:

  1. найдите запятую и разбейте строку на значения, разделенные запятой.
  2. обновите таблицу с той же строкой и добавленной подстрокой.

Для первой части я бы посоветовал вам взглянуть здесь

А для второй части вам следует взглянуть здесь

Еще одна вещь, нет ярлыка для любой проблемы.Вы не должны бежать от проблемы.Примите это как вызов.Учитесь, пока вы ищете ответ.Лучше всего руководствоваться здесь и попытаться сделать больше исследований и усилий.

2 голосов
/ 07 ноября 2011

Хм ... может быть, это?

SELECT @before := CONCAT(SUBSTRING_INDEX(`columnname`,',',3),','),
       @len := LENGTH(SUBSTRING_INDEX(`columnname`,',',4)+1
FROM `tablename` WHERE ...;

SELECT CONCAT(@before,'newstring',SUBSTRING(`columnname`,@len+1)) AS `result`
FROM `tablename` WHERE ...;

Заменить что-нибудь, как нужно, но это должно вот-вот сделать.

РЕДАКТИРОВАТЬ : объединены в один запрос:

SELECT
    CONCAT(
        SUBSTRING_INDEX(`columnname`,',',3),
        ',newstring,',
        SUBSTRING(`columnname`, LENGTH(SUBSTRING_INDEX(`columnname`,',',4)+1))
    ) as `result`
FROM `tablename` WHERE ...;

То, что +1, возможно, должно быть +2, я не уверен, но это должно сработать.

0 голосов
/ 08 августа 2016

Попробуйте:

   UPDATE yourtable
   SET
      categories =
       TRIM(BOTH ',' FROM
         REPLACE(
           REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
       )
   WHERE
     FIND_IN_SET('2', categories)

взято отсюда Лучший способ удалить значение из поля SET?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...