将 int 转换为 RGB 或十六进制颜色

Mar*_*ark 6 sql-server t-sql type-conversion

我正在使用一个数据库,其中颜色存储为整数。由于某些未知原因,它们实际上是负整数。

现在,我需要在 CSSbackground-color属性中使用它们,该属性接受颜色名称、RGB 颜色或十六进制颜色。问题是我不知道如何正确转换它们以获得可接受的字符串值。

我尝试使用转换-65280CONVERT(VARBINARY(8), abs(S.Color))我正在获取0x0000FF00. 但是,我需要的输出是#00ff00rgb(0,255,0)。我怎样才能做到这一点?

Jul*_*eur 10

这三个中的任何一个都应该工作:

SELECT color
    , HEX_1 = '#'
        + CONVERT(varchar(6),
            CAST(ABS(color) as varbinary(1))
            + CAST(ABS(color/256) as varbinary(1))
            + CAST(ABS(color/256/256) as varbinary(1))
        , 2)
    , HEX_2 = '#'+
        +CONVERT(varchar(2), CAST(ABS(color) as varbinary(1)), 2)
        +CONVERT(varchar(2), CAST(ABS(color/256) as varbinary(1)), 2)
        +CONVERT(varchar(2), CAST(ABS(color/256/256) as varbinary(1)), 2)
    , RGB = 'rgb('
        + CAST(ABS(color)%256 as varchar(3)) + ','
        + CAST(ABS(color/256)%256 as varchar(3)) + ','
        + CAST(ABS(color/256/256)%256 as varchar(3)) + ')'
FROM (
    values 
        (-65280)
        , (-65535)
        , (-460293)
        , (-13606962)
        , (-3678732)
) as colors(color)
Run Code Online (Sandbox Code Playgroud)

输出:

color       | HEX_1     | HEX_2     | RGB
-65280      | #00FF00   | #00FF00   | rgb(0,255,0)
-65535      | #FFFF00   | #FFFF00   | rgb(255,255,0)
-460293     | #050607   | #050607   | rgb(5,6,7)
-13606962   | #32A0CF   | #32A0CF   | rgb(50,160,207)
-3678732    | #0C2238   | #0C2238   | rgb(12,34,56)
Run Code Online (Sandbox Code Playgroud)

CONVERT风格2需要SQL Server 2008或更高版本。

该表达式可用于计算列定义或内联表值函数。