1

問題(私の質問を説明するために大幅に単純化されています):

Postgres では、テーブルの 3 つの列をビューの 1 つの列に結合しようとしていますが、必要のないときに ipaddresses の末尾にスラッシュ表記が追加されています (注:スラッシュ表記は IP アドレスの末尾にはありませんそもそも私のテーブルで)。

私がやっていること:

私のテーブルには、「inet」タイプの「ipaddress」という列があります。

私のテーブルには、「テキスト」タイプの「firstname」という列があります。

私のテーブルには、「整数」型の「年齢」という列があります。

ビューで次の sql ステートメントを使用して、これらの 3 つの列を 1 つに結合しようとしています。

SELECT (thetablename.ipaddress || thetablename.firstname || thetablename.age) 
AS personal_details
FROM thetablename

これはすべて完全に機能し、3 つの列を 1 つにマージしますが、ipaddresses については、以下に示すように末尾にスラッシュ表記を追加します。

私が得ている出力:

-------------------------
    personal_details
-------------------------
192.168.0.199/32 Dave 65    <-- as you can see it is adding /32 but i do not want it to
192.168.0.100/32 Paul 56
192.168.0.121/32 Lucy 28

IPアドレスの末尾に「/32」スラッシュ表記を追加することを防ぐことはできないようです。

タイプを明示的に指定しようとしましたが、これは効果がありません:

SELECT (thetablename.ipaddress::inet || thetablename.firstname::text || thetablename.age::integer) 
AS personal_details
FROM thetablename

私が見落としている明らかな何かがあるに違いありませんが、それが何であるかを理解することはできません.

4

1 に答える 1

1

デフォルトのキャスト フォーマッタの代わりにホスト関数を使用します。

だから使用:

SELECT (host(thetablename.ipaddress::inet) || thetablename.firstname::text || thetablename.age::integer) 
AS personal_details
FROM thetablename

あなた/32が持っているのは、デフォルトのフォーマッタでデフォルトで追加されたネットワークマスクです。

inettypeで使用できる関数がいくつかあります。この関数と結果のリストを確認してください

于 2013-10-28T12:38:17.310 に答える