Используя эти пользовательские REGEXP_REPLACE()
функции , вы можете заменить его пустой строкой:
UPDATE children SET wishes = REGEXP_REPLACE(wishes, '(,(\s)?)?Surfboard', '') WHERE caseNum='whatever';
К сожалению, вы не можете просто использовать простой старый REPLACE()
потому что вы не знаете, где в строке появляется надпись «Surfboard».Фактически, приведенное выше регулярное выражение, вероятно, потребует дополнительной настройки, если в начале или в конце появляется 'Surfboard'.
Возможно, вы могли бы обрезать оставшиеся передние и конечные запятые следующим образом:
UPDATE children SET wishes = TRIM(BOTH ',' FROM REGEXP_REPLACE(wishes, '(,(\s)?)?Surfboard', '')) WHERE caseNum='whatever';
Так что здесь происходит?Регулярное выражение удаляет 'Surfboard' плюс необязательную запятую и пробел перед ним.Затем окружающая функция TRIM()
исключает возможную начальную запятую в случае, если в начале строки возникла надпись «Surfboard».С этим, вероятно, может справиться и регулярное выражение, но, честно говоря, я слишком устал, чтобы ломать голову над этим.
Примечание: Я никогда не использовал их сам и не могу поручиться за ихэффективность или надежность, но это место для начала.И, как другие упоминают в комментариях, вы действительно должны иметь их в нормализованной таблице пожеланий, а не в виде строки, разделенной запятыми.
Обновление
Мышлениеоб этом больше, я более неравнодушен к простому использованию встроенного REPLACE()
, а затем к очистке лишней запятой, где вы можете получить две запятые подряд.Это ищет две запятые рядом, как будто не было пробелов, разделяющих ваши оригинальные элементы списка.Если элементы были разделены запятыми и пробелами, измените ',,'
на ', ,'
во внешнем вызове REPLACE()
.
UPDATE children SET wishes = TRIM(BOTH ',' FROM REPLACE(REPLACE(wishes, 'Surfboard', ''), ',,', ',')) WHERE caseNum='whatever';