Sql-Server

將 int 轉換為 RGB 或十六進制顏色

  • May 14, 2020

我正在使用一個顏色儲存為整數的數據庫。由於某些未知原因,它們實際上是負整數。

現在,我需要在 CSSbackground-color屬性中使用它們,該屬性接受顏色名稱、RGB 顏色或十六進制顏色。問題是我不知道如何正確轉換它們以獲得可接受的字元串值。

我嘗試轉換-65280CONVERT(VARBINARY(8), abs(S.Color))獲得0x0000FF00. 但是,我需要的輸出是#00ff00or rgb(0,255,0)。我怎樣才能做到這一點?

這三個中的任何一個都應該起作用:

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)

輸出:

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)

CONVERTwith 樣式 2需要SQL Server 2008 或更高版本。

該表達式可用於計算列定義或內聯表值函式。

引用自:https://dba.stackexchange.com/questions/127448