3

这段代码有什么问题?我正在使用 perl 的DateTime模块DBIx::Class

my $entry_rs = $schema->resultset('table_name')->search_rs(             
    {                                                                       
        table_id      => $row->table_id,                                    
        utc_timestamp => { '<', \'DateTime->now()->subtract(days => 180)' },
    },                                                                      
)->all;                                                                     

我正在使用 PostgreSQL,utc_timestamp类型是时间戳。如果我计算DateTime->now()->subtract(days => 180)并存储在变量中并替换该值,那么它就可以工作。

错误:

DBIx::Class::Storage::DBI::_dbh_execute():DBI 异常:DBD::Pg::st 执行失败:错误:“日期时间”列不存在?

请帮忙

4

1 回答 1

5

您将 Perl 代码作为文字 SQL 传递给数据库。这是行不通的。尝试这样的事情:

my $dt       = DateTime->now()->subtract(days => 180);
my $parser   = $schema->storage->datetime_parser;
my $entry_rs = $schema->resultset('table_name')->search_rs(             
    {                                                                       
        table_id      => $row->table_id,                                    
        utc_timestamp => { '<', $parser->format_datetime($dt) },
    },                                                                      
)->all;

此代码用于datetime_parser检索DBIx::Class::Storage::DBI适合DateTime::Format您的数据库的类。然后它调用format_datetime该类将DateTime对象转换为可以传递给数据库的字符串。

于 2013-05-30T17:41:16.473 回答