【问题标题】:Perl DBIx::Class DateTime subtractionPerl DBIx::Class DateTime 减法
【发布时间】:2013-05-31 03:16:00
【问题描述】:

这段代码有什么问题?我正在使用 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-&gt;now()-&gt;subtract(days =&gt; 180) 并将其存储在变量中并替换该值,那么它就可以工作。

错误:

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

请帮忙

【问题讨论】:

    标签: perl dbix-class


    【解决方案1】:

    您将 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 in DBIx::Class::Storage::DBI 检索适合您的数据库的DateTime::Format 类。然后它在该类上调用format_datetimeDateTime 对象转换为可以传递给数据库的字符串。

    【讨论】:

    • @nwellnhoff - 这正是我所做的。不过谢谢。我在想,有一种方法可以在其中欺骗 perl 代码..谢谢..
    猜你喜欢
    • 2016-08-25
    • 2018-01-09
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2011-01-07
    • 2011-07-09
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多