我想将 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/