【问题标题】:Query from a variable table in postgres从 postgres 中的变量表查询
【发布时间】:2019-08-15 11:36:08
【问题描述】:

在我的 postgres 数据库中,我有一些表,它们的名称根据当前日期而有所不同。

更具体地说,他们的名字如下:

STATSDATA15_8_2019
STATSDATA14_8_2019
STATSDATA13_8_2019
...

我需要一个考虑当前日期的自动查询,从相关表中获取数据。

例如:

如果日期是 8 月 15 日,我需要:

select * from STATSDATA15_8_2019

如果是 8 月 14 日,我需要:

select * from STATSDATA14_8_2019

事实上,我需要一个带有变量的自动、动态查询。

【问题讨论】:

标签: postgresql


【解决方案1】:

免责声明:我真的建议遵循@a_horse_with_no_name 创建分区表的建议!


如果您想保留您的设计,您可以使用一个函数,该函数根据格式字符串动态创建查询。

当然,这仅适用于所有表的结构都相同的情况。

demo:db<>fiddle

CREATE OR REPLACE FUNCTION select_table_by_date(the_date date) RETURNS TABLE(content text)
LANGUAGE plpgsql
AS $$
    BEGIN
        RETURN QUERY 
             EXECUTE format(
                 'SELECT * FROM statsdata%s', 
                 to_char(the_date, 'DD_FMMM_YYYY')
             );
    END;
$$;

SELECT * FROM select_table_by_date('2019-08-15'::date);

SELECT * FROM select_table_by_date(CURRENT_DATE);

【讨论】:

  • 亲爱的 S-Man 非常感谢您的有用回答。但是我对表格的命名约定犯了一个错误。它们实际上是这样的: STATSDATA8_7_2019 , STATSDATA8_9_2019 , STATSDATA8_10_2019 , STATSDATA8_15_2019 ,如果您根据此修改修改答案以解决我的问题,我将不胜感激。 tnx 很多
  • 只需将日期格式字符串更改为'FMMM-FMDD-YYYY'
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多