微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 如何从postgres sql中的inet值中提取八位字节?

我想将inet格式的IPv4地址转换为整数组件.

例如,将’101.255.30.40’变为oct1 = 101,oct2 = 255,oct3 = 30,oct4 = 40.

如果我将inet转换为varchar,那么有正则表达式应该这样做,但这似乎是不优雅的.是否有一行函数用于返回inet的第n个八位字节?

select inet_to_octet('101.255.30.40',4) as temp;  -- returns temp=40?

解决方法

除非您想尝试将函数贡献给inet数据类型,否则您需要依赖基于字符串的版本.也许把这样的东西(但有一些错误检查)放到一个sql函数中以便于访问?:

CREATE OR REPLACE FUNCTION extract_octet(inet,integer) RETURNS integer AS $$
    SELECT ((regexp_split_to_array(host($1),E'\\.'))[$2])::int;
$$LANGUAGE sql;



select extract_octet(inet '192.26.22.2',2)

Output: 26

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐