如何将postgresql中表示十六进制八位组的字符串转换为二进制?
我在postgresql中存储了一个mac地址,类型为mac地址。我需要转换有关I/G位和U/L位的信息中的第一个八位字节() 示例:mac地址是如何将postgresql中表示十六进制八位组的字符串转换为二进制?,postgresql,binary,hex,Postgresql,Binary,Hex,我在postgresql中存储了一个mac地址,类型为mac地址。我需要转换有关I/G位和U/L位的信息中的第一个八位字节() 示例:mac地址是AA-BB-CC-DD-EE-FF。然后,第一个八位组是AA。转换为二进制:0101 01010。最后一位表示I/G:0。从右到左的第二个是U/L位:1 如何在postgresql查询中执行此操作 这就是我到目前为止所做的: select id, mac, left(mac::text,2) as octet from mytable 报税表为:
AA-BB-CC-DD-EE-FF
。然后,第一个八位组是AA
。转换为二进制:0101 01010
。最后一位表示I/G:0。从右到左的第二个是U/L位:1
如何在postgresql查询中执行此操作
这就是我到目前为止所做的:
select id, mac, left(mac::text,2) as octet
from mytable
报税表为:
id,mac,octet
13,aa:XX:XX:XX:XX:XX,aa
我还尝试了left(mac::text,2)::integer作为integer
,但我收到了错误消息[22P02]错误:integer的输入语法无效:“aa”
我想要的结果如下:
id, mac, octet, binary, ig_bit, ul_bit
13, aa:XX:XX:XX:XX:XX,aa, 1010 1010, 0, 1
所以我隔离了第一位,但是,格式是“text”,我不能将其转换为整数或二进制 使用
您也可以使用该功能,例如:
请注意,最左边一位的索引是0。我在pg邮件列表中找到了:
with my_data(mac) as (
values ('AA-BB-CC-DD-EE-FF'::macaddr)
)
select
mac,
('x' || left(mac::text, 2))::bit(8) as octet,
substr(('x' || left(mac::text, 2))::bit(8)::text, 8, 1) as ig_bit,
substr(('x' || left(mac::text, 2))::bit(8)::text, 7, 1) as ul_bit
from my_data
mac | octet | ig_bit | ul_bit
-------------------+----------+--------+--------
aa:bb:cc:dd:ee:ff | 10101010 | 0 | 1
(1 row)
with my_data(mac) as (
values ('AA-BB-CC-DD-EE-FF'::macaddr)
),
octet as (
select mac, ('x' || left(mac::text, 2))::bit(8) as binary_octet
from my_data
)
select
mac,
binary_octet,
get_bit(binary_octet, 7) as ig_bit,
get_bit(binary_octet, 6) as ul_bit
from octet