1

问题(为了解释我的问题而大大简化):

在 Postgres 中,我试图将表中的三列合并为视图中的一列,但是在 ipaddresses 的末尾添加斜线符号时,我不想要它(注意:斜线符号不在 IP 地址的末尾在我的桌子上开始)。

我在做什么:

在我的表中,我有一个名为“ipaddress”的列,其类型为“inet”。

在我的表中,我有一个名为“名字”的列,它是“文本”类型。

在我的表中,我有一个名为“年龄”的列,它是“整数”类型。

在视图中使用以下 sql 语句,我试图将这三列合并为一列:

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

这一切都很完美,并将三列合并为一列,但是对于 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是使用默认格式化程序默认添加的网络掩码。

您有几个可用inet类型的功能:检查此功能和结果列表

于 2013-10-28T12:38:17.310 回答