gpt4 book ai didi

sql - 如何将整数转换为可在 postgresql 中用作列名的字符串?

转载 作者:行者123 更新时间:2023-11-29 13:28:57 24 4
gpt4 key购买 nike

我正在尝试使用两个循环来 INSERT INTO new_table。问题是 old_table 是这样的,带有奇怪的“年-月”列名:

CREATE TABLE old_table
(
regionname character varying(10),
"1996-01" integer,
"1996-02" integer,
"1996-03" integer,
...
"2014-11" integer,
"2014-12" integer
)

等待数据的空 new_table 具有如下模式:

CREATE TABLE new_table
(
regionname character varying(10),
year integer,
month integer,
value integer
)

我想在下面的函数中使用参数 y 和 m 来创建列名。例如当循环中 y = 1996 和 m = 1 时,NEEDTOFILL 部分应该是可以用作列名的“1996-01”。

CREATE FUNCTION insertLoop() RETURNS void AS $$
BEGIN
FOR y IN 1996..2014 LOOP
FOR m IN 1..12 LOOP
INSERT INTO new_table(regionname, year, month, value)
(
SELECT regionname, y AS year, m AS month, **NEEDTOFILL** AS value
FROM old_table
WHERE **NEEDTOFILL** IS NOT NULL
);
END LOOP;
END LOOP;
END;
$$ LANGUAGE plpgsql;

NEETOFILL 应该是什么?或者有没有办法选择第 i 列而不是使用 SQL 中的实际列名?或者其他方法?

最佳答案

您需要使用::将整数转换为 varchar 并使用 || 连接喜欢...

y::varchar || '-' || m::varchar 

编辑你说得对。这将生成值而不是列名然后你必须在变量中生成查询然后执行查询。像这样

query = 'INSERT INTO new_table(regionname, year, month, value)
SELECT regionname, y AS year, m AS month, ' || y::varchar || '-' || m::varchar || ' AS value
FROM old_table
WHERE ' || y::varchar || '-' || m::varchar || ' IS NOT NULL';
execute query;

关于sql - 如何将整数转换为可在 postgresql 中用作列名的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202859/

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