7

私が行った場合

INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())

2つのフィールドは両方の列で常に同一ですか?

同上

INSERT INTO table1 (datetime1, datetime2) VALUES (NOW(),NOW())
                                                ,(NOW(),NOW()) 

4つのデータベースエントリすべてが同じ値になるのでしょうか、それともrow1 <> row2になる可能性がありますか?

これは質問ではなく理論的な質問であることに注意してくださいwork-around
方法と理由を本当に知りたいだけです。

4

5 に答える 5

10

Postgresを使用now()すると、トランザクションの開始を示すタイムスタンプが常に返されます。

したがって、2番目の例では、4つの行すべてが同じタイムスタンプ値を持ちます。

「実際の」タイムスタンプが必要な場合は、を使用する必要がありますclock_timestamp()

詳細はマニュアルにあります:

http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT

于 2011-09-01T13:20:33.157 に答える
4

クエリに時間がかからない場合、すべての値が同じであるという変化はかなり大きくなります。しかし、私はそれに依存しません。より良いアプローチは、最初に値を変数に入れ、その変数を複数回使用することです。

于 2011-09-01T13:16:22.803 に答える
2

それらをすべて同じにする必要がある場合は、最初にnow変数を定義し、すべての列をそれに設定する方が適切です。

于 2011-09-01T13:10:51.470 に答える
2
DECLARE @Timestamp DATETIME
SELECT @Timestamp = getDate()
INSERT INTO table1 (datetime1, datetime2) VALUES (@Timestamp, @Timestamp)

上記は、必要に応じて、テーブルの両方のフィールドに等しい値を作成します。

使用しているデータベースがNOW()をサポートしていて、一意の日時値が必要な場合、時間の変更は短くなりますが、クエリによってその値が生成されます。

于 2011-09-01T13:17:09.450 に答える
0

すでにあなたと同じような質問がありましたが、それは特にMySQLに関するものでした。

リチャードの回答から次のように、によって返される値はNOW()ステートメントの実行の開始時に固定され、実行が完了するまで変更されることはありません。これはドキュメントで確認されています。PostgreSQLと同様に、MySQLにも実際のタイムスタンプを返す別の関数があります。これは、関数を含むステートメントの特定の部分の評価の時刻に対応する関数であり、その関数はSYSDATE()です。

参照:

于 2011-09-30T06:08:40.323 に答える