Postgres 9.4:快速将颜色从十六进制转换为rgb表示

时间:2014-10-18 14:49:57

标签: sql postgresql plpgsql

对于存储在Postgresql 9.4中的样本#112233,我有十六进制表示颜色

需要将此表示转换为pl / pgsql函数中的rgb(17,34,51)

有什么想法以最快的方式转换它?

1 个答案:

答案 0 :(得分:5)

这使用Erwin's trick将十六进制值转换为整数值:

with colors (hex_code) as (
  values ('#112233'), ('#203040')
)
select 'rgb('||
       ('x'||substr(hex_code,2,2))::bit(8)::int||','||
       ('x'||substr(hex_code,4,2))::bit(8)::int||','||
       ('x'||substr(hex_code,6,2))::bit(8)::int||')'
from colors
;

不确定这是否是最快的方式,但我想不出另一种方法。 select表达式可以毫无问题地移动到函数中。

SQLFiddle演示:http://sqlfiddle.com/#!15/d41d8/3720