2011-04-21 192 views
3

我有一個記錄表,每個表存儲一個顏色名稱。 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

回答

3
;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

2

您需要自己添加相應名稱的RGB值,沒有辦法從顏色名稱中派生出這些信息(畢竟構成「深藍色」?)。

您可以使用CSS names作爲提示來構建初始查找表。

+0

我認爲查找表是最好的選擇,因爲它在構建之後添加到它是微不足道的。 – 2011-04-21 21:09:48

1

您需要將顏色解碼爲用於更新表格的同一查詢中的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)