我有一个这样的SQL语句:
insert into table1 (col1, col2, col3, col4)
select
value1,
value2,
now(),
now()
from
othertable inner join anotherothertable on somecolumn = someothercolumn;
该查询的组件select
将返回数十万行。
调用将如何now()
表现?
- 它会为所有行插入返回相同的值吗?
- 鉴于每个单行插入似乎被调用两次,它会在同一个插入中返回相同的值吗?
我想执行此插入,以便now()
调用一次,并且该值是固定的并在插入所有行和数据时使用。我不确定这个查询是否会以这种方式运行。
由于无法执行类似于current_timestamp = now()
SQL 中的操作并用作current_timestamp
参数来代替对 的两次调用now()
,因此我不知道如何执行此操作。
这在日期/时间函数和运算符中有详细记录,但本质上,如果您的目的是在每一行中使用相同的时间,那么您的代码就可以了。它将为每个单独的语句甚至整个事务返回相同的值。
您可以做一个快速测试:
语句中对函数“now”的调用将为语句中的所有行返回相同的时间。返回的时间是当前事务开始的时间,即事务中当前语句或较早语句的时间。
相关文档位于 Postgres 手册9.9.5 中。当前日期/时间。
总结如下:
因此,您不需要将时间放入“变量”中。如果出于某种原因,您仍然想这样做,您可以借助公共表表达式(WITH 查询)将时间隔离到“变量”中,而无需离开 SQL:
您可以将值存储在新变量中并像这样保存:
声明和使用变量是最好的选择恕我直言。
DBFiddle 演示