Преобразование имен цветов в RGB

У меня есть таблица записей, каждая из которых хранит имя цвета. например:

Product    |  Colour
-------------------
Product A  |  Blue
Product B  |  Black

Я добавил 3 новых столбца: R, G и B. Как преобразовать цвета в значения RGB с помощью одного SQL-запроса?


person Curt    schedule 21.04.2011    source источник
comment
Нет встроенной функции SQL Server для получения значений RGB из названия цвета. У вас уже есть таблица сопоставлений?   -  person Martin Smith    schedule 21.04.2011
comment
Если вы спрашиваете, как преобразовать синий цвет в значение RGB... вы не можете. Во всяком случае, не в SQL. Единственный способ сделать это — сопоставить имя каждого цвета с набором значений RGB, но это нужно будет вводить вручную.   -  person anothershrubery    schedule 21.04.2011


Ответы (3)


Вам нужно будет добавить значения RGB для соответствующего имени самостоятельно, нет никакого способа получить эту информацию из названия цвета (в конце концов, что представляет собой «темно-синий»?).

Вы можете использовать имена CSS в качестве подсказок для создания исходной справочной таблицы.

person Alex K.    schedule 21.04.2011
comment
Я думаю, что справочная таблица - лучший выбор, потому что ее легко добавить после того, как она построена. - person Jerry Ritcey; 22.04.2011

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

UPDATE products
SET
    r = (CASE colour
            WHEN 'Black' THEN 0
            WHEN 'Red' THEN 255
            WHEN 'Green' THEN 0
            WHEN 'Blue' THEN 0
            WHEN 'White' THEN 255
            ELSE NULL
        END),
    g = (CASE colour
            WHEN 'Black' THEN 0
            WHEN 'Red' THEN 0
            WHEN 'Green' THEN 255
            WHEN 'Blue' THEN 0
            WHEN 'White' THEN 255
            ELSE NULL
        END),
    b = (CASE colour
            WHEN 'Black' THEN 0
            WHEN 'Red' THEN 0
            WHEN 'Green' THEN 0
            WHEN 'Blue' THEN 255
            WHEN 'White' THEN 255
            ELSE NULL
        END)

Или, может быть, следующим образом:

UPDATE products
SET
    r = (CASE
            WHEN Colour IN ('Black', 'Green', 'Blue') THEN 0
            WHEN Colour IN ('Red', 'White') THEN 255
            ELSE NULL
        END),
    g = (CASE
            WHEN Colour IN ('Black', 'Red', 'Blue') THEN 0
            WHEN Colour IN ('Green', 'White') THEN 255
            ELSE NULL
        END),
    b = (CASE
            WHEN Colour IN ('Black', 'Red', 'Green') THEN 0
            WHEN Colour IN ('Blue', 'White') THEN 255
            ELSE NULL
        END)
person Serg    schedule 21.04.2011

person    schedule
comment
Это большое спасибо. Там нет всех системных цветов, но те, которые отсутствуют, я могу просто добавить в CTE. Сладкий, привет! - person Curt; 26.04.2011