型別
PostgreSQL 提供的資料型別來儲存的 IPv4、IPv6 的地址和MAC地址。這是更好地使用這些型別,而不是純文字型別儲存網路地址,因為這些型別提供輸入錯誤檢查和特殊的操作和函式。
名稱 |
儲存長度 |
描述 |
cidr |
7 或 19 bytes |
IPv4 和 IPv6 網路 |
inet |
7 或 19 bytes |
IPv4 和 IPv6 hosts 和網路 |
macaddr |
6 bytes |
MAC 地址 |
macaddr8 |
8 bytes |
MAC 地址(EUI-64 格式) |
運算子
運算子 |
描述 |
舉例 |
結果 |
< |
小於 |
inet '192.168.1.5' < inet '192.168.1.6' |
TRUE |
<= |
小於等於 |
inet '192.168.1.5' <= inet '192.168.1.5' |
TRUE |
= |
等於 |
inet '192.168.1.5' = inet '192.168.1.5' |
TRUE |
>= |
大於等於 |
inet '192.168.1.5' >= inet '192.168.1.5' |
TRUE |
> |
大於 |
inet '192.168.1.5' > inet '192.168.1.4' |
TRUE |
<> |
不等於 |
inet '192.168.1.5' <> inet '192.168.1.4' |
TRUE |
<< |
被包含 |
inet '192.168.1.5' << inet '192.168.1/24' |
TRUE |
<<= |
被包含或等於 |
inet '192.168.1/24' <<= inet '192.168.1/24' |
TRUE |
>> |
包含 |
inet '192.168.1/24' >> inet '192.168.1.5' |
TRUE |
>>= |
包含或等於 |
inet '192.168.1/24' >>= inet '192.168.1/24' |
TRUE |
&& |
包含或被包含 |
inet '192.168.1/24' && inet '192.168.1.80/28' |
TRUE |
~ |
按位取反 |
~inet '192.168.1.6' |
63.87.254.249 |
& |
按位與 |
inet '192.168.1.6' & inet '0.0.0.255' |
0.0.0.6 |
| |
按位或 |
inet '192.168.1.6' | inet '0.0.0.255' |
192.168.1.255 |
+ |
加 |
inet '192.168.1.6' + 25 |
192.168.1.31 |
- |
減 |
inet '192.168.1.43' - 36 |
192.168.1.7 |
- |
減 |
inet '192.168.1.43' - inet '192.168.1.19' |
24 |
函式
cidr 和 inet 函式
函式 |
返回型別 |
描述 |
示例 |
結果 |
abbrev(inet) |
text |
顯示為文字格式 |
select abbrev(inet '10.1.0.0/16'); |
10.1.0.0/16 |
abbrev(cidr) |
text |
顯示為文字格式 |
select abbrev(cidr '10.1.0.0/16'); |
10.1/16 |
broadcast(inet) |
inet |
網路廣播地址 |
select broadcast('192.168.1.5/24'); |
192.168.1.255/24 |
family(inet) |
int |
獲取地址族,4位IPv4,6為IPv6 |
select family('::1'); |
6 |
host(inet) |
text |
抽取IP地址,並以text顯示 |
select host('192.168.1.5/24'); |
192.168.1.5 |
hostmask(inet) |
inet |
為網路構造主機掩碼 |
select hostmask('192.168.23.20/30'); |
0.0.0.3 |
masklen(inet) |
int |
抽取掩碼長度 |
select masklen('192.168.1.5/24'); |
24 |
netmask(inet) |
inet |
為網路構造子網掩碼 |
select netmask('192.168.1.5/24'); |
255.255.255.0 |
network(inet) |
cidr |
抽取地址的網路部分 |
select network('192.168.1.5/24'); |
192.168.1.0/24 |
set_masklen(inet, int) |
inet |
為inet設定子網掩碼長度 |
select set_masklen('192.168.1.5/24', 16); |
192.168.1.5/16 |
set_masklen(cidr, int) |
cidr |
為cidr設定子網掩碼長度 |
select set_masklen('192.168.1.0/24'::cidr, 16); |
192.168.0.0/16 |
text(inet) |
text |
將IP地址和掩碼長度抽取為文字 |
select text(inet '192.168.1.5'); |
192.168.1.5/32 |
inet_same_family(inet, inet) |
boolean |
是否屬於相同的地址族 |
select inet_same_family('192.168.1.5/24', '::1'); |
f |
inet_merge(inet, inet) |
cidr |
包括兩個入參地址的最小網路地址 |
select inet_merge('192.168.1.5/24', '192.168.2.5/24'); |
192.168.0.0/22 |
macaddr 函式
函式 |
返回型別 |
描述 |
示例 |
結果 |
trunc(macaddr) |
macaddr |
將mac地址後3個位元組設定為0 |
select trunc(macaddr '12:34:56:78:90:ab'); |
12:34:56:00:00:00 |
macaddr 型別還支援標準關係運算子( > , <= 等)用於詞法排序,和按位運算子( ~ , & 和 | )非,與和或。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2738426/,如需轉載,請註明出處,否則將追究法律責任。