Обновите MySQL (используя regexp?) - PullRequest
2 голосов
/ 19 мая 2011

Я хотел бы обновить значения, которые выглядят как «someSubdomainInfo.mydomain.com», до «mydomain.com» (.com - просто пример, я хотел бы перехватить все остальное - в основном очистить информацию о поддомене)

Мысль об использовании ^ ([az]. *.)? ([A-zA-Z0-9 _-] . [Az] ) в качестве RegExp (отсутствует домен, начинающийся с цифры, возможно, другие)

Есть идеи, как написать соответствующее заявление об обновлении?

Спасибо

Редактировать: глядя на мой вопрос еще раз, кажется, я не представил его четко. Я хочу, чтобы это было сделано для всех доменов, а не для одного за другим домена. Другими словами, я не знаю, что такое «mydomain.com» раньше времени.

Если я экспортирую в csv, я могу использовать это регулярное выражение и заменить на \ 2 (проверено в текстовом редакторе EditPro), и я ищу что-то похожее на купол непосредственно в MySQL.

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

SUBSTRING_INDEX () лучше всего подходит для извлечения частей URL.

Если вы знаете расширение домена, вы можете быть умным и предотвратить случайные обновления. В противном случае вы можете использовать regex в предложении или подсчитать количество . s, чтобы это обновление не изменило URL-адреса, которые вы не хотите очищать от своего субдомена.

UPDATE test SET url = SUBSTRING_INDEX(url, '.', -2) WHERE SUBSTRING_INDEX(url, '.', -2) = 'mydomain.com';
0 голосов
/ 19 мая 2011

RegExp все еще примитивен в MySQL. Они хороши для сопоставления и сравнения, но не так много замены.

Я бы предложил использовать Строковые функции .

SELECT url_column, SUBSTRING(url_column, INSTR(url_column, '.mydomain.com') + 1)) FROM your_table;

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

...