■
時間の計算をするSQL文をDBI(DBD::Pg)を使って実行しようとしたときにエラーになってハマりました。
my $v_time = "'2008-04-14 16:00:00'"; my $v_interval = "'-2 day'"; my $query = "SELECT TIMESTAMP ? + ?"; my $db_retref = $dbh->selectall_arrayref($query, undef, $v_time, $v_interval);
結果
selectall_arrayref failed: ERROR: syntax error at or near "$1" LINE 1: SELECT TIMESTAMP $1 + $2
結論としてはキャストをちゃんとすればOKのようです。(以下動くソース)
my $v_time = "'2008-04-14 16:00:00'"; my $v_interval = "'-2 day'"; my $query = "SELECT CAST(? AS TIMESTAMP) + CAST(? AS INTERVAL)"; my $db_retref = $dbh->selectall_arrayref($query, undef, $v_time, $v_interval);
参考文献
http://www.enterprisedb.com/docs/jp/8.3/server/typeconv-oper.html