разграничение данных в базе данных MySQL без их экспорта - PullRequest
0 голосов
/ 05 ноября 2011

Возможно ли разделить данные в строке базы данных mysql?У меня есть данные, которые превышают около 2 миллионов записей, поэтому экспорт в csv и выполнение этого вручную не работает, так как база данных отказывается выгружать данные.

данные в формате

url.com?some=0
url2.com?some=14

Возможно ли удалить?а данные, которые следуют после него?

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Ну обо всем по порядку. Неважно, насколько велика ваша база данных, MySQL должен сделать дамп в CSV без проблем. Я успешно сбросил таблицы, содержащие в два раза больше записей, с которыми вы имеете дело. Конечно, отчасти это предполагает, что ОЗУ и дисковое пространство не являются проблемой, что может быть не так.

Что касается вашего вопроса о фильтрации данных, то да, это возможно. Я собираюсь предположить, что ваш столбец назван "url" для моего примера ниже, поэтому не забудьте изменить его, если он будет назван как-нибудь еще.

По сути, вы бы запустили такой запрос:

UPDATE tablename SET url = SUBSTRING_INDEX(url, "?", 1);

Это изменит все значения URL, чтобы они содержали только текст до первого появления знака вопроса.

1 голос
/ 05 ноября 2011

Вы можете использовать locate и substring, чтобы нарезать эти строки. Например:

mysql> select url, case when locate('?', url) = 0 then url else substring(url, 1, locate('?', url) - 1) end as truncated from urls;
+------------------+-----------+
| url              | truncated |
+------------------+-----------+
| url.com?some=0   | url.com   |
| url2.com?some=14 | url2.com  |
| url3.com         | url3.com  |
+------------------+-----------+

так что это должно сработать:

update your_table
set url = case when locate('?', url) = 0 then url else substring(url, 1, locate('?', url) - 1) end

Другой вариант: substring_index:

mysql> select url, substring_index(url, '?', 1) from urls;
+------------------+------------------------------+
| url              | substring_index(url, '?', 1) |
+------------------+------------------------------+
| url3.com         | url3.com                     |
| url.com?some=0   | url.com                      |
| url2.com?some=14 | url2.com                     |
+------------------+------------------------------+

так что это также должно работать:

update your_table
set url = substring_index(url, '?', 1)
...