ネットワークアドレス関数と演算子

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ

# 9.12. ネットワークアドレス関数と演算子

表9-33に、`inet`型および`cidr`型で使用可能な演算子を示します。演算子 `<<`、`<<=`、`>>`、および`>>=`はサブネットに含まれているかどうかを調べるものです。ネットワークの部分のみを考慮（ネットワークアドレスのホスト部分を無視）して2つのネットワークアドレスが等しいか、もしくは一方のネットワークが他方のサブネットになっているかを特定します。

表 9-33. `cidr`と`inet`演算子

演算子 | 説明 | 例
--- | --- | ---
`<` | 未満 | `inet '192.168.1.5' < inet '192.168.1.6'`
`<=` | 未満もしくは等しい（以下） | `inet '192.168.1.5' <= inet '192.168.1.5'`
`=` | 等しい | `inet '192.168.1.5' = inet '192.168.1.5'`
`>=` | より大きいもしくは等しい（以上） | `inet '192.168.1.5' >= inet '192.168.1.5'`
`>` | より大きい | `inet '192.168.1.5' > inet '192.168.1.4'`
`<>` | 等しくない | `inet '192.168.1.5' <> inet '192.168.1.4'`
`<<` | 内包される | `inet '192.168.1.5' << inet '192.168.1/24'`
`<<=` | 内包されるか等しい | `inet '192.168.1/24' <<= inet '192.168.1/24'`
`>>` | 内包する | `inet '192.168.1/24' >> inet '192.168.1.5'`
`>>=` | 内包するか等しい | `inet '192.168.1/24' >>= inet '192.168.1/24'`
`~` | ビット否定 | `~ inet '192.168.1.6'`
`&` | ビット積 | `inet '192.168.1.6' & inet '0.0.0.255'`
`|` | ビット和 | `inet '192.168.1.6' | inet '0.0.0.255'`
`+` | 加算 | `inet '192.168.1.6' + 25`
`-` | 減算 | `inet '192.168.1.43' - 36`
`-` | 減算 | `inet '192.168.1.43' - inet '192.168.1.19'`

表9-34に、`inet`型および`cidr`型で使用可能な関数を示します。 関数`abbrev`、`host()`、および`text()`、は主として、代替の整形表示を提供する目的のものです。

表 9-34. `cidr`および`inet`型関数

関数 | 戻り値 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``abbrev(`inet`)`` | `text` | 表示用テキスト省略形 | `abbrev(inet '10.1.0.0/16')` | `10.1.0.0/16`
``abbrev(`cidr`)`` | `text` | 表示用テキスト省略形 | `abbrev(cidr '10.1.0.0/16')` | `10.1/16`
``broadcast(`inet`)`` | `inet` | ネットワークブロードキャストアドレス | `broadcast('192.168.1.5/24')` | `192.168.1.255/24`
``family(`inet`)`` | `int` | アドレスファミリの取り出し。IPv4では`4`、IPv6では`6`。 | `family('::1')` | `6`
``host(`inet`)`` | `text` | IPアドレスをテキストで抽出 | `host('192.168.1.5/24')` | `192.168.1.5`
``hostmask(`inet`)`` | `inet` | ネットワーク用のホストマスクの構築 | `hostmask('192.168.23.20/30')` | `0.0.0.3`
``masklen(`inet`)`` | `int` | ネットマスク長の抽出 | `masklen('192.168.1.5/24')` | `24`
``netmask(`inet`)`` | `inet` | ネットワーク用ネットマスクの構築 | `netmask('192.168.1.5/24')` | `255.255.255.0`
``network(`inet`)`` | `cidr` | ネットワークアドレスからネットワーク部を抽出 | `network('192.168.1.5/24')` | `192.168.1.0/24`
``set_masklen(`inet`, `int`)`` | `inet` | `inet`値のネットマスク長を設定 | `set_masklen('192.168.1.5/24', 16)` | `192.168.1.5/16`
``set_masklen(`cidr`, `int`)`` | `cidr` | `cidr`値のネットマスク長を設定 | `set_masklen('192.168.1.0/24'::cidr, 16)` | `192.168.0.0/16`
``text(`inet`)`` | `text` | IPアドレスとネットマスク長をテキストで抽出 | `text(inet '192.168.1.5')` | `192.168.1.5/32`

`cidr`値はすべて、暗黙的または明示的に`inet`型にキャスト可能です。 したがって、上で示した`inet`に対する操作を行う関数は`cidr`値でも動作します。（`inet`と`cidr`で別々に関数が存在しますが、それは、この2つで動作に違いがあるためです。）また、`inet`値から`cidr`へのキャストも許されます。これが行われると、ネットマスクの右側のビットは、`cidr`として有効な値とするために0となります。さらに、通常のキャスト構文、例えば、`inet(`expression`)`や``colname`::cidr`を使用して、テキスト値を`inet`や`cidr`にキャストすることもできます。

表9-35に、`macaddr`型で使用可能な関数を示します。関数``trunc(`macaddr`)``は終わりの3バイトがゼロに設定されたMACアドレスを返します。これは、残った接頭部を製造者に対応させることに使えます。

表 9-35. `macaddr`型関数

関数 | 戻り値 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``trunc(`macaddr`)`` | `macaddr` | 終わりの３バイトをゼロに設定 | `trunc(macaddr '12:34:56:78:90:ab')` | `12:34:56:00:00:00`

`macaddr`型は（`>`、`<=`等の）辞書編集順に並べる標準関係演算子もサポートします。

前のページ | ホーム | 次のページ
幾何関数と演算子 | 上に戻る | テキスト検索関数と演算子