gpt4 book ai didi

postgresql - PL/pgSQL中的IP递增函数

转载 作者:行者123 更新时间:2023-12-03 07:51:27 25 4
gpt4 key购买 nike

我需要一个 PL/pgSQL 函数,它将 IP 地址作为文本,并向其中添加给定的整数值,并根据需要传递八位字节。

我已经有一个用 JavaScript 编写的工作版本:

export const incrementIpAddress = (ipAddress: string, amount: number) => {
const octets = ipAddress.split('.');
const numbers = octets.map(octet => parseInt(octet));

let carry = amount;
for(let i = numbers.length - 1; i >= 0 && carry > 0; i--) {
const sum = numbers[i] + carry;
numbers[i] = sum % 256;
carry = Math.floor(sum / 256);
}

return numbers.join('.');
}

我尝试让 ChatGPT 将其转换为 PL/pgSQL(我知道,我很抱歉),这就是它的结果:

CREATE OR REPLACE FUNCTION increment_ip_address(ip_address text, amount integer) RETURNS text AS $$
DECLARE
octets text[];
numbers integer[];
carry integer;
i integer;
BEGIN
octets := string_to_array(ip_address, '.');
FOREACH i IN ARRAY octets LOOP
numbers := numbers || i::integer;
END LOOP;

carry := amount;
FOR i IN REVERSE 1 .. array_upper(numbers, 1) LOOP
numbers[i] := numbers[i] + carry;
carry := FLOOR(numbers[i] / 256);
numbers[i] := numbers[i] % 256;
END LOOP;

RETURN array_to_string(numbers, '.')::text;
END;
$$ LANGUAGE plpgsql;

但是这不起作用,并且始终输出与给定的相同的 IP,而不是递增。我可以获得一些帮助来使此功能正常工作吗?

最佳答案

PostgreSQL有一个built-in inet type您完全可以用于该目的。它适用于 + operator正如您所期望的,添加适当的结转行为:demo

select '127.0.0.255'::inet+23;
--127.0.1.22

关于postgresql - PL/pgSQL中的IP递增函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77018847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com