Sql 以MS Access颜色格式获取颜色之间的范围

Sql 以MS Access颜色格式获取颜色之间的范围,sql,colors,hex,rgb,bgr,Sql,Colors,Hex,Rgb,Bgr,在数据库中,我只以MS Access颜色格式(BGR的十进制格式)存储颜色:看起来像8689859=>brown=>c39884。。。 但我需要根据颜色范围进行过滤,我的意思是用户使用颜色选择器并选择例如#ffffff颜色。我想返回所有颜色与#ffffff相同的行(不是完全相同的颜色,而是相同范围内的+) 有可能吗?我想=-范围应该适用于BGR值中的每个单独颜色元素。在这种情况下,您需要提取这些元素,如下所示: SELECT colour ,Fix([Colour]/(256*256

在数据库中,我只以MS Access颜色格式(BGR的十进制格式)存储颜色:看起来像8689859=>brown=>c39884。。。 但我需要根据颜色范围进行过滤,我的意思是用户使用颜色选择器并选择例如#ffffff颜色。我想返回所有颜色与#ffffff相同的行(不是完全相同的颜色,而是相同范围内的+)


有可能吗?

我想=-范围应该适用于BGR值中的每个单独颜色元素。在这种情况下,您需要提取这些元素,如下所示:

SELECT colour
      ,Fix([Colour]/(256*256)) as B
      ,Fix(([Colour]-Fix([Colour]/(256*256))*256*256)/256) as G
      ,[Colour]-Fix([Colour]/(256*256))*256*256-Fix(([Colour]-Fix([Colour]/(256*256))*256*256)/256)*256 as R
FROM MyColours
我建议您将它们放在单独的函数中,如GetR、GetB、GetG

您甚至可以创建计算字段并将其应用于表:

现在,要查找表格,您还需要将所选颜色拆分为B G R元素:

Dim selectedColour as Integer
Dim rr as Integer
Dim gg as Integer
Dim bb as Integer
selectedColour = 11124168 ' A9BDC8 - selected from the colour picker
rr = getR(selectedColour)
gg = getG(selectedColour)
bb = getB(selectedColour)
如果表中有计算字段,则查询将为:

SELECT colour 
FROM MyColours
WHERE B BETWEEN bb-4 AND bb+4 
AND G BETWEEN gg-4 AND gg+4 
AND R BETWEEN rr-4 AND rr+4 
如果不希望计算字段使用VBA函数:

SELECT colour 
FROM MyColours
WHERE getB(colour) BETWEEN bb-4 AND bb+4 
AND getG(Colour) BETWEEN gg-4 AND gg+4 
AND getR(Colour) BETWEEN rr-4 AND rr+4 

请用同样的定义。。