Perl スクリプトでパラメーター化されたクエリを使用して、Postgres データベースからタイムスタンプを取得しようとしています。これは、教育目的のためだけに、切り詰めた例です。
私はタイムスタンプと間隔としてと を定義$start_date
しました:$end_date
my $start_date = "current_timestamp - interval '6 hours'";
my $end_date = "current_timestamp";
$dbh
以下を使用して、以前に定義したデータベースに送信します。
my $sql = "SELECT cast(? as timestamp), cast(? as timestamp)";
my $sth = $dbh->prepare($sql);
$sth->execute($start_date, $end_date);
これを行うと、やや紛らわしいエラーが発生します。
DBD::Pg::st execute failed: ERROR: date/time value "current" is no longer supported
current
7.2 以降 PG でサポートされていないことは理解していますが、使用していません。サポートされているAFACTを使用してcurrent_timestamp
います。つまり、私が入ると:psql
select (cast(current_timestamp - interval '6 hours' as timestamp), cast(current_timestamp as timestamp));
結果は私が期待するものです (2 つのタイムスタンプ、前者は後者の 6 時間前)。
now()
の代わりに使用することもできますcurrent_timestamp
。次の方法で使用できます。
my $start_date = "now() - interval '6 hours'";
my $end_date = "now()";
perl でクエリを実行しようとすると、次のエラーが発生します。
DBD::Pg::st execute failed: ERROR: invalid input syntax for type timestamp: "now() - interval '6 hours'"
それでも、クエリ:
select (cast(now() - interval '6 hours' as timestamp), cast(now() as timestamp));
期待される結果が得られます。
私はかなり困惑しています。