如果我这样做
INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())
两列中的两个字段是否始终相同?
同上
INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())
,(NOW(),NOW())
所有四个数据库条目是否具有相同的值,或者是否可能是row1<> ROW2?
请注意,这是一个理论问题,而不是work-around
问题
我真的很想知道如何以及为什么。
答案 0 :(得分:10)
使用Postgres now()
始终返回表示事务开始的时间戳。
因此,对于第二个示例,所有四行都将具有相同的时间戳值。
如果您想拥有“真实”时间戳,则必须使用clock_timestamp()
。
手册中有更多详细信息:
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
答案 1 :(得分:4)
如果您的查询不长,那么所有值相同的变化都非常高。我不会依赖它。更好的方法是首先将值放在变量中,然后多次使用该变量。
答案 2 :(得分:2)
如果你必须拥有它们,你最好先定义一个now变量,然后将所有列设置为。
答案 3 :(得分:2)
DECLARE @Timestamp DATETIME
SELECT @Timestamp = getDate()
INSERT INTO table1 (datetime1, datetime2) VALUES (@Timestamp, @Timestamp)
如果这是您想要的,上面将在表格的两个字段中创建相等的值。
如果您使用的数据库支持NOW(),并且您想要唯一的日期时间值,则您的查询将生成它,但时间更改将会很短。
答案 4 :(得分:0)
原来已经出现了类似于你的问题,但问题是specifically about MySQL。
如理查德的回答所示,NOW()
返回的值在语句执行开始时固定,并且在执行完成之前从未更改,这由文档确认。与PostgreSQL类似,MySQL中还有另一个函数返回实际时间戳,即对应于语句包含函数的特定部分的评估时间,该函数为SYSDATE()
。
参考文献: