Разбить строку на строку - PullRequest
2 голосов
/ 16 ноября 2011

Я использую MySQL.

У меня есть таблица с именем " class ", таблица " class " имеет три столбца name, year и class_code, как показано ниже:

Класс Таблица:

enter image description here

Теперь я хотел бы использовать приведенную выше таблицу для создания новой таблицы с именем " temp ", которая содержит столбцы class_code и value.

Правило состоит в том, что каждое строковое значение в каждом поле столбца строки таблицы " class " будет разбито на слова, и каждое слово будет вставлено в " temp"таблица как value столбец записи таблицы temp , как показано ниже:

temp таблица:

enter image description here

Я использую MySQL.

Можно ли сгенерировать таблицу " temp " исключительно с помощью оператора SQL и как?

То есть:

CREATE TABLE temp;

ALTER TABLE temp DISABLE KEYS;

INSERT INTO ...(how to split the string value of each field in "class" table and insert to "temp" table??? )

P.S:. В качестве значения я использовал простую строку равной длины, но на самом деле регистр имеет очень случайную строку длины, и количество слов в каждой строке также случайное .

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011
CREATE TABLE new_table
SELECT SUBSTRING(name,  1, 4) as field, class_code FROM old_table
UNION
SELECT SUBSTRING(name,  6, 4) as field, class_code FROM old_table
UNION
SELECT SUBSTRING(name, 11, 4) as field, class_code FROM old_table
UNION
SELECT SUBSTRING(year,  1, 4) as field, class_code FROM old_table
UNION
SELECT SUBSTRING(year,  6, 4) as field, class_code FROM old_table
0 голосов
/ 16 ноября 2011

Вы должны написать функцию для разделения строк в MySql как

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

И используйте его для разделения значений и назначения значений для разделения и вставки в таблицу в SP. Для получения дополнительной информации см. MySQL Split String

...