我在postgresql中有一个用mac地址存储的mac地址。我需要在有关I / G位和U / L位(qazxsw poi)的信息中转换第一个八位字节。
示例:mac地址是more infos。第一个八重奏是AA-BB-CC-DD-EE-FF
。转换为二进制:AA
。最后一位代表I / G:0。从右到左的第二位是U / L位:1。
我怎样才能在postgresql查询中执行此操作?
这是我到目前为止:
0101 01010
回报是:
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 as integer
我想要的结果如下:
[22P02] ERROR: invalid input syntax for integer: "aa"
所以我已经隔离了第一位,但是,格式是'text',我无法将其转换为整数或二进制。
使用id, mac, octet, binary, ig_bit, ul_bit
13, aa:XX:XX:XX:XX:XX,aa, 1010 1010, 0, 1
bit strings:
你也可以使用函数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)
,例如:
get_bit()
注意,最左边的位的索引是0。