Превращение varchar в набор - PullRequest
0 голосов
/ 24 ноября 2011

Я унаследовал БД с около 6000 записей. Один из столбцов представляет набор из 6 элементов как varchar. Некоторые записи выглядят так:

A
ABC
A,B,C,D,E,F
ade
ONONONONONONON
onon?" or sleep(10)#onononon

Это выглядит довольно грязно, но я думаю, что хочу спасти те, которые представлены в виде букв, но игнорировать то, что выглядит как результат инъекционной атаки.

Что я хочу сделать, это представить этот столбец как тип SET. Я думаю в соответствии с (псевдокод):

UPDATE MYTABLE 
SET NEWCOLUMN = (NEWCOLUMN & 'A') 
WHERE (REGEX MATCHES OLDCOLUMN)

И повторите этот запрос 6 раз для 6 различных элементов.

Хотя я не могу сообразить свой следующий шаг ... Я не могу понять, как написать этот запрос на обновление, чтобы он работал - для начала я не могу понять, как написать регулярное выражение для MySQL.

Ответы [ 3 ]

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

Честно говоря, ваша лучшая ставка будет состоять в том, чтобы запустить его на языке сценариев, таком как PHP, Perl, Python и т. Д. ... и разбить значения таким образом на новые записи. Один запрос SQL не будет соответствовать задаче.

0 голосов
/ 24 ноября 2011

Я только быстро проверил это, но как насчет ALTER TABLE

ALTER TABLE mytable MODIFY mycolumn SET('AAA', 'BBB', 'CCC', 'A', 'C');

Я бы сначала сделал это с копией и убедился, что предупреждений нет, иначе вы потеряете данные.

0 голосов
/ 24 ноября 2011

Хотя это решение не использует sql, оно может оказаться полезным.Попробуйте использовать Google Refine, это бесплатный инструмент для очистки разнородных наборов данных, он имеет приятный графический интерфейс и позволяет использовать регулярные выражения и т. Д.

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