2015-09-01 2 views
0

У меня есть текст на двух разных языках в разных полях таблицы. Языки разделяются с помощью []. Так это выглядит:Mysql для замены частичного подстановочного текста

[ан] Привет [/ EN] [FR] Бонжур [/ фр]

Я переход на новую CMS, которые не могут читать 2 языка, поэтому мне нужно для удаления всего французского контента в базе данных. Есть ли запрос MySQL, который позволит мне это сделать?

Я нашел много ответов для обновления таблицы для поиска и замены фиксированных значений, но не могу найти, как это сделать, когда значения являются динамическими, но всегда зажатыми между фиксированными значениями ([fr] * [/ fr]).

Чтобы усложнить ситуацию, нет консистенции, в которой язык сначала входит в ячейки, иногда это французский, иногда его английский.

Большое спасибо за любую помощь!

+0

Если вы используете MariaDB 10, то вы можете использовать [ 'REGEXP_REPLACE()'] (https://mariadb.com/kb/en/mariadb/regexp_replace/). –

+0

Стандартные выражения mysql могут совпадать. они не могут заменить, они не могут захватить. поэтому вы застряли в простых строковых операциях, а это значит, что вам почти наверняка удастся вырезать ваши строки в код на стороне клиента (например, php) и сделать там расщепление. –

ответ

0

Если вы не используете MariaDB 10 (который имеет REGEXP_REPLACE() функцию), то вы можете попытаться взломать что-то с LIKE, RLIKE и/или SUBSTRING_INDEX.

SELECT SUBSTRING_INDEX(data, '[fr]', 1) as new_data 
FROM table 
WHERE data LIKE '%[fr]%[/fr]%'; 
+0

Спасибо, миллион! Это отлично возвращает новые данные. Но как я действительно удалю%% [fr]% [/ fr]% из ячеек? – Cozzie

+0

Вы можете просто изменить это на запрос 'UPDATE'. 'UPDATE table SET data = SUBSTRING_INDEX (данные, '[fr]', 1) ГДЕ данные LIKE '% [fr]% [/ fr]%';'. –

+0

Amazing, спасибо снова (спасибо за все ответы) – Cozzie

0

Может попробовать это: языки обновление установить LANG = заменить (Ланг, '[фр] Бонжур [/ FR]', '')

Смежные вопросы