Sql 如何使用日期函数作为子查询?
我想用Sql 如何使用日期函数作为子查询?,sql,postgresql,date,Sql,Postgresql,Date,我想用 SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00'); 作为独立查询使用: postgres=# SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00'); date_part ------------ 1559347200 (1 row) 在这样的子查询中: CREATE TABLE events_201906 PARTITION OF events
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00');
作为独立查询使用:
postgres=# SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00');
date_part
------------
1559347200
(1 row)
在这样的子查询中:
CREATE TABLE events_201906 PARTITION OF events
FOR VALUES FROM (SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00')) TO (SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-07-01 00:00:00'));
但我一直得到:
ERROR: syntax error at or near "SELECT"
LINE 2: FOR VALUES FROM (SELECT EXTRACT(EPOCH FROM TIMESTAMP '20...
^
我做错了什么?根据:
分区\u绑定\u规范为:
所以它不能是子查询,必须是文本
但是,如果需要,可以动态执行分区语句,如下所示:
create or replace function create_partition() returns int as
$fn$
declare
p_from bigint;
p_to bigint;
query text;
begin
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00') into p_from;
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-07-01 00:00:00') into p_to;
query := 'CREATE TABLE events_201906 PARTITION OF events
FOR VALUES FROM (' || p_from || ') TO (' || p_to || ');';
execute query;
return 1;
end;
$fn$ language plpgsql;
然后执行。当然,您可以通过接受分区名称和from/to时间戳的参数使其更有用。好的,但我可以使用类似于选择的东西。。。转化为var;然后在我的查询中重用它?不,但是您可以选择一个变量,然后动态执行CREATETABLE语句,请参阅我更新的答案。
create or replace function create_partition() returns int as
$fn$
declare
p_from bigint;
p_to bigint;
query text;
begin
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-06-01 00:00:00') into p_from;
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2019-07-01 00:00:00') into p_to;
query := 'CREATE TABLE events_201906 PARTITION OF events
FOR VALUES FROM (' || p_from || ') TO (' || p_to || ');';
execute query;
return 1;
end;
$fn$ language plpgsql;