【问题标题】:Create table with concatenating current year and month创建连接当前年份和月份的表
【发布时间】:2018-02-15 02:53:56
【问题描述】:

我想在 Postgresql 中创建一个表(如果它不存在的话)并在其中插入一些数据。

该表必须具有以下命名约定,即 test_yyyymm,其中 yyyymm 是当前年份和月份。

我尝试了各种方法并停止了动态sql。

DO
$$
BEGIN
    EXECUTE 'CREATE TABLE IF NOT EXISTS ' || 'select concat(''test_'', (select to_char(now(), ''yyyymm'')))::text'|| ' (temp_id INT NOT NULL,
                temp_name varchar(150),
                PRIMARY KEY (temp_id))';
END;
$$

如果我只选择这部分

select concat('test_', (select to_char(now(), 'yyyymm')))::text

我得到了我想要的名称,但它在动态 sql 中不起作用。

我尝试删除该行并将其替换为静态名称,它就像一个魅力,所以我确信问题出在表名中。

DO $$
BEGIN
    EXECUTE 'CREATE TABLE IF NOT EXISTS ' || 'test_table' || ' (temp_id INT NOT NULL,
                 temp_name varchar(150),
                 PRIMARY KEY (temp_id))';
END;

$$

我怎样才能以人道的方式实现这一目标?

提前致谢!

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你很亲密。不需要select,只需按原样使用转换即可。

    DO $$
    BEGIN 
    EXECUTE 'CREATE TABLE IF NOT EXISTS ' || concat('Log_',to_char(now(), 'yyyymm')) || ' (temp_id INT NOT NULL,
                    temp_name varchar(150),
                    PRIMARY KEY (temp_id))';
    END;
    $$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多