Sql 如何在SELECT中获取给定的日期+n个月?

Sql 如何在SELECT中获取给定的日期+n个月?,sql,postgresql,Sql,Postgresql,如何将给定的n=14个月的数字添加到给定的日期(如2008-01 2008年1月)以获得2009-03 我的目标是以YYYY-MM格式显示日期,而不是foo_id,foo_id是以下查询中的月数: SELECT foo_id AS "date", amount FROM my_table GROUP BY foo_id ORDER BY foo_id; 目前,我可以获得给定的日期+n个月,仅在个月内: SELECT date_part('month' , DATE

如何将给定的n=14个月的数字添加到给定的日期(如2008-01 2008年1月)以获得2009-03

我的目标是以YYYY-MM格式显示日期,而不是foo_id,foo_id是以下查询中的月数:

SELECT
  foo_id AS "date",
  amount
FROM my_table
GROUP BY foo_id
ORDER BY foo_id;
目前,我可以获得给定的日期+n个月,仅在个月内:

SELECT date_part('month' , DATE '2010-01-01' + INTERVAL '124 month') AS "date";
=> 4
您可以使用to_char将结果格式化为仅包含年份和月份:

select to_char(current_date + interval '14 month', 'yyyy-mm');
如果月数存储在列中:

select to_char(current_date + make_interval(months => foo_id), 'yyyy-mm');
所以

报税表:2009-03

您可以使用to_char将结果格式化为仅包含年份和月份:

select to_char(current_date + interval '14 month', 'yyyy-mm');
如果月数存储在列中:

select to_char(current_date + make_interval(months => foo_id), 'yyyy-mm');
所以

报税表:2009-03


间隔可以乘以:

SELECT DATE '2010-01-01' + foo_id * INTERVAL '1 month' AS "date" FROM my_table
-- start date + int * 1 month

间隔可以乘以:

SELECT DATE '2010-01-01' + foo_id * INTERVAL '1 month' AS "date" FROM my_table
-- start date + int * 1 month

当前日期也可以通过以下方式获得:


当前日期也可以通过以下方式获得:


什么数据类型是foo_id?@a_horse_和\u no_name实际上是一个整数。那么该如何将该整数转换为日期?选择日期“2010-01-01”+foo_id*间隔“1个月”作为my_Table中的日期id对于存储多个月的列来说是一个相当奇怪的名称foo_id是什么数据类型?@a_horse_和\u no_name是一个整数id事实上。那么该如何将该整数转换为日期呢?选择日期“2010-01-01”+foo_id*间隔“1个月”作为my_tableid中的日期对于一个存储了多个月的列来说是一个相当奇怪的名称。在这种情况下,我该如何设置格式yyyy-mm?我最终得到了它,并使用了“yyyy-mm…”,感谢oterh注释。在这种情况下,我如何设置格式yyyy-mm?由于oterh注释,我最终使用了to_char…,“yyy-mm”。我得到了以下错误:没有函数与给定的名称和参数类型匹配。您可能需要在make_Interval上添加显式类型转换,然后您运行的是过时的Postgres版本:或者foo_id不是您所说的整数,我可能确实运行的是过时的PostgreSQL版本。这意味着您运行的是不受支持的Postgres版本。make_interval返回到至少,但它也不再受支持。我正在运行PostgreSQL 9.6.20。我遇到了以下错误:没有函数与给定的名称和参数类型匹配。您可能需要在make_Interval上添加显式类型转换,然后您运行的是过时的Postgres版本:或者foo_id不是您所说的整数,我可能确实运行的是过时的PostgreSQL版本。这意味着您运行的是不受支持的Postgres版本。make_interval返回到至少一个也不再支持的值我正在运行PostgreSQL 9.6.20