Lexen Asked: 2023-09-08 21:20:03 +0800 CST2023-09-08 21:20:03 +0800 CST 2023-09-08 21:20:03 +0800 CST PostgreSQL:在查询中声明变量的问题 772 我正在尝试声明一个变量以供稍后在 PostgreSQL 查询中使用。我经常在 TSQL 中这样做,但我不确定语法。 我在网上看到的内容都是这样的: declare timestamp_utc timestamp := current_timestamp; select start_date; 当我运行上述查询时,我收到一条错误消息: 我确信这很简单,但我在网上找不到答案。如果您能提供任何帮助,我们将不胜感激。 postgresql 2 个回答 Voted Best Answer Erwin Brandstetter 2023-09-08T21:58:14+08:002023-09-08T21:58:14+08:00 普通 SQL 中没有变量。 您可以使用“自定义选项”作为有限的解决方法。看: 为整个脚本声明变量 服务器端过程语言(例如PL/pgSQL)具有变量。DECLARE您可以在代码块中使用 - 在函数、过程以及使用DO命令执行的匿名代码块中。PL/pgSQL 是后者的默认 PL。看: 如何在过程(而不是函数)中使用变量? 或者您可以在客户端中设置变量,例如默认命令行终端psql。看: PSQL 传递外部变量 如何从命令行将变量传递给 PL/pgSQL 代码? 有关的: 在 Postgres 脚本中设置自定义常量 Lexen 2023-09-08T22:16:52+08:002023-09-08T22:16:52+08:00 正如 Erwin 指出的,你不能在 vanilla PostgreSQL 中声明变量。我解决这个问题的方法是声明一个临时表并在其中插入我需要的值。 drop table if exists variables; create temp table variables ( timestamp_utc timestamp ); insert into variables select current_timestamp; select timestamp_utc from variables; drop table if exists variables; 这是更多的代码,但它可以处理我正在使用的用例。
普通 SQL 中没有变量。
您可以使用“自定义选项”作为有限的解决方法。看:
服务器端过程语言(例如PL/pgSQL)具有变量。
DECLARE
您可以在代码块中使用 - 在函数、过程以及使用DO
命令执行的匿名代码块中。PL/pgSQL 是后者的默认 PL。看:或者您可以在客户端中设置变量,例如默认命令行终端psql。看:
有关的:
正如 Erwin 指出的,你不能在 vanilla PostgreSQL 中声明变量。我解决这个问题的方法是声明一个临时表并在其中插入我需要的值。
这是更多的代码,但它可以处理我正在使用的用例。