创建包含当前年份和月份

时间:2018-02-14 16:47:00

标签: sql postgresql

我想在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;

$$

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

提前致谢!

1 个答案:

答案 0 :(得分: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;
$$