我有一個記錄表,每個表存儲一個顏色名稱。 e.g:將顏色名稱轉換爲RGB
Product | Colour
-------------------
Product A | Blue
Product B | Black
我已經添加了3個新列:使用一個SQL查詢R,G & B.我怎麼能轉換成顏色的RGB值?
我有一個記錄表,每個表存儲一個顏色名稱。 e.g:將顏色名稱轉換爲RGB
Product | Colour
-------------------
Product A | Blue
Product B | Black
我已經添加了3個新列:使用一個SQL查詢R,G & B.我怎麼能轉換成顏色的RGB值?
;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
非常感謝。所有的系統顏色都不存在,但任何缺少的我都可以添加到CTE中。甜,乾杯! – Curt 2011-04-26 08:32:58
您需要自己添加相應名稱的RGB值,沒有辦法從顏色名稱中派生出這些信息(畢竟構成「深藍色」?)。
您可以使用CSS names作爲提示來構建初始查找表。
我認爲查找表是最好的選擇,因爲它在構建之後添加到它是微不足道的。 – 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)
沒有內置SQL Server的功能,從顏色名獲得RGB值。你有映射表嗎? – 2011-04-21 10:31:25
如果您問如何將「藍色」轉換爲RGB值......您不能。無論如何,都不是SQL。唯一的辦法是將每個顏色名稱映射到一組RGB值,但這需要手動輸入。 – anothershrubery 2011-04-21 10:35:00