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

例如,将 '101.255.30.40' 变成 oct1=101、oct2=255、oct3=30 和 oct4=40。

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

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

关于postgresql - 如何从 postgres sql 中的 inet 值中提取八位字节?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15751554/

10-14 05:38