将颜色名称转换为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