Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中保存临时会话变量_Sql_Postgresql - Fatal编程技术网

如何在PostgreSQL中保存临时会话变量

如何在PostgreSQL中保存临时会话变量,sql,postgresql,Sql,Postgresql,假设我有一个简单的SQL语句,如下所示: SELECT * from birthday WHERE date < now() + INTERVAL '1 day' AND date > now() - INTERVAL '1 day'; 但是From和To变量的方程要比这复杂得多。我将在多个查询中重用这些方程的结果。那么,我可以像在任何编程语言中那样临时存储它们吗?我想象的是: $from := now() - INTERVAL '1 day'; $to:= now() + INT

假设我有一个简单的SQL语句,如下所示:

SELECT * from birthday WHERE date < now() + INTERVAL '1 day' AND date > now() - INTERVAL '1 day';
但是From和To变量的方程要比这复杂得多。我将在多个查询中重用这些方程的结果。那么,我可以像在任何编程语言中那样临时存储它们吗?我想象的是:

$from := now() - INTERVAL '1 day';
$to:= now() + INTERVAL '1 day';
SELECT * from birthday WHERE date < $from AND date > $to;
我尝试按照中的建议使用SELECT INTO,但这不是我想要的,因为它创建一个完整的数据库表只是为了保存变量,这在以后的会话中重用它时也会导致错误,即使在使用TEMP参数时也是如此。它说关系已经存在了! 我还尝试了一些美元符号$syntax和冒号+equal:=syntax,但都不起作用。SQL不是任何编程语言。如果要存储这些值以便在一个查询中重复使用,则可以使用CTE:

WITH params as (
      SELECT now() - INTERVAL '1 day' as _from,
             now() + INTERVAL '1 day' as _to
     )
SELECT * 
FROM params CROSS JOIN
     birthday b
WHERE date < params._to AND date > params._from;
如果要在多个查询中重复此操作,我建议使用一个临时表:

CREATE TEMPORARY TABLE params AS
      SELECT now() - INTERVAL '1 day' as _from,
             now() + INTERVAL '1 day' as _to;

SELECT * 
FROM params CROSS JOIN
     birthday b
WHERE date < params._to AND date > params._from;
您还可以将代码封装在过程/函数中。或者使用某种脚本语言或Python之类的语言