欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

玩转Greenplum:轻松实现IP地址表达方式转换的技巧函数

最编程 2024-07-27 07:26:08
...

正常大家平时所见的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)

 

推荐阅读