Greenplum小把戏 - ip地址表达方式转换函数

正常大家平时所见的IP地址通常是用点号(.)分割的四组数字,例如:192.168.0.100,但是做通信行业的朋友可能会比较习惯在数据库表中存储长整型(long)数字,以方便查询比较和节约存储。

如果采用这种方式,那么会经常遇到在点号分割传和长整型之间的转换,在Greenplum中,我们可以通过下面两个函数实现二者之间的轻松转换:

函数主体为:

CREATE OR REPLACE FUNCTION inet_aton(text)
  RETURNS bigint AS
$BODY$
SELECT
split_part($1,'.',1)::int8*(256*256*256)+
split_part($1,'.',2)::int8*(256*256)+
split_part($1,'.',3)::int8*256+
split_part($1,'.',4)::int8;
$BODY$
  LANGUAGE sql VOLATILE;
CREATE OR REPLACE FUNCTION inet_ntoa(bigint)
  RETURNS text AS
$BODY$
SELECT (($1>>24) & 255::int8) || '.' ||
(($1>>16) & 255::int8) || '.' ||
(($1>>8) & 255::int8) || '.' ||
($1 & 255::int8) as result
$BODY$
  LANGUAGE sql VOLATILE;

使用演示:

postgres=# select inet_aton('192.168.100.107');
 inet_aton
------------
 3232261227
(1 row)

postgres=# select inet_ntoa(3232261227);
    inet_ntoa
-----------------
 192.168.100.107
(1 row)

 

转载于:https://my.oschina.net/javacy/blog/2996657

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值