Обновление SQL - разделение строк - PullRequest
1 голос
/ 21 июня 2011

У меня проблема с SQL.Как я могу разделить строку с символом разделителя '' и получить доступ к этим частям, чтобы обновить строку?.. Чтобы прояснить это:

Таблица похожа на:

Products ( Name, Colors,         Data1, Data2, Data3)
              a  red green blue
              b  white black

И я хочу сделать что-то вроде:

Products ( Name, Colors,         Data1, Data2, Data3)
              a  red green blue    red  green  blue
              b  white black     white  black

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Похоже, что число столбцов (Data1, Data2, Data3) не является динамическим.

Итак, я предполагаю, что поле «Цвета» может содержать не более трех слов, разделенных пробелом.

Тогда быстрый и грязный способ сделать это - написать серию операторов обновления, например:

UPDATE Products SET Data1 = get_color(Colors, ' ', 1);

UPDATE Products SET Data2 = get_color(Colors, ' ', 2);

UPDATE Products SET Data3 = get_color(Colors, ' ', 3);

где get_color будет пользовательской функцией, которая возвращает n-е слово из заданной строки:

CREATE FUNCTION get_color(
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, '');
2 голосов
/ 21 июня 2011

Разумным решением является создание хотя бы еще одной таблицы:

product
=======

product_id (PK)
product_name

color
=====

color_id (PK)
product_id (FK to product.product_id)
color_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...