将颜色名称转换为RGB

问题描述:

我有一个记录表,每个表存储一个颜色名称。 e.g:将颜色名称转换为RGB

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

我已经添加了3个新列:使用一个SQL查询R,G & B.我怎么能转换成颜色的RGB值?

+1

没有内置SQL Server的功能,从颜色名获得RGB值。你有映射表吗? – 2011-04-21 10:31:25

+0

如果您问如何将“蓝色”转换为RGB值......您不能。无论如何,都不是SQL。唯一的办法是将每个颜色名称映射到一组RGB值,但这需要手动输入。 – anothershrubery 2011-04-21 10:35:00

;with Colours(Name, R, G, B) as 
(
    select 'White', 255, 255, 255 union all 
    select 'Silver', 192, 192, 192 union all 
    select 'Gray', 128, 128, 128 union all 
    select 'Black', 0 , 0 , 0 union all 
    select 'Red',  255, 0 , 0 union all 
    select 'Maroon', 128, 0 , 0 union all 
    select 'Yellow', 255, 255, 0 union all 
    select 'Olive', 128, 128, 0 union all 
    select 'Lime', 0 , 255, 0 union all 
    select 'Green', 0 , 128, 0 union all 
    select 'Aqua', 0 , 255, 255 union all 
    select 'Teal', 0 , 128, 128 union all 
    select 'Blue', 0 , 0 , 255 union all 
    select 'Navy', 0 , 0 , 128 union all 
    select 'Fuchsia', 255, 0 , 255 union all 
    select 'Purple', 128, 0 , 128 
) 
update P set 
    R = C.R, 
    G = C.G, 
    B = C.B 
from products as P 
    inner join Colours as C 
    on P.Colour = C.Name 
+1

非常感谢。所有的系统颜色都不存在,但任何缺少的我都可以添加到CTE中。甜,干杯! – Curt 2011-04-26 08:32:58

您需要自己添加相应名称的RGB值,没有办法从颜色名称中派生出这些信息(毕竟构成“深蓝色”?)。

您可以使用CSS names作为提示来构建初始查找表。

+0

我认为查找表是最好的选择,因为它在构建之后添加到它是微不足道的。 – 2011-04-21 21:09:48

您需要将颜色解码为用于更新表格的同一查询中的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)